C# 全外接无纤
我试图在fluent nhibernate中进行完整的外部连接,但是我似乎无法找到正确的语法来让这个方法工作 我试过加入alias和projections,但两者都不起作用 例如,如果我有两个对象(A和B),我需要得到所有的对象A和对象B,但它们可能并不总是有完整的关系。对象A与对象B有关系,但我可能有与对象A完全无关的对象B,也可能有与对象B没有任何关系的对象AC# 全外接无纤,c#,nhibernate,fluent-nhibernate,fluent,C#,Nhibernate,Fluent Nhibernate,Fluent,我试图在fluent nhibernate中进行完整的外部连接,但是我似乎无法找到正确的语法来让这个方法工作 我试过加入alias和projections,但两者都不起作用 例如,如果我有两个对象(A和B),我需要得到所有的对象A和对象B,但它们可能并不总是有完整的关系。对象A与对象B有关系,但我可能有与对象A完全无关的对象B,也可能有与对象B没有任何关系的对象A public class objectA{ public virtual int? ID {get; set; } publ
public class objectA{
public virtual int? ID {get; set; }
public virtual string someData {get; set;}
public virtual ObjectB objB {get; set;}
}
public class objectB{
public virtual int ID_B {get; set;}
public virtual bool boolVale {get; get;}
public virtual int? someInt {get; set;}
}
我对它们的映射如下所示:
public objectA_Map(){
Table("objectA_Table");
Id(x => x.Id).Column("ID");
Map(x=> x.someData).Column("someData");
References(x => x.objB).Column("fkToB");
}
public objectB_Map(){
Table("objectB_Table");
Id (x => x.ID_B).Column("ID");
Map(x =>x.boolValue).Column("Deleted");
Map(x => x.someInt).Column("Number");
}
同样,我需要结果查询的每一行包含所有对象的A_ID、someData、ID_B、boolValue,即使B没有A,并且即使没有B也包含所有A
任何见解都会大有帮助
我尝试生成的SQL应该如下所示:
SELECT A.ID, A.someData, B.ID AS BID, B.DELETED, B.Number
FROM objectA_Table A
FULL OUTER JOIN objectB_Table B ON A.ID = B.ID
public class DTO
{
public Guid AId { get; set; }
public string SomeData { get; set; }
public Guid BId { get; set; }
public bool Deleted { get; set; }
public int Number { get; set; }
}
您可能无法像这样选择完整的实体,但可以使用QueryOver从查询中构建DTO列表:
IList<DTO> result = session.QueryOver<A>(() => aAlias)
.Full.JoinQueryOver(p => p.B, () => bAlias)
.SelectList(list => list
.Select(() => aAlias.Id).WithAlias(() => resultAlias.AId)
.Select(() => aAlias.SomeData).WithAlias(() => resultAlias.SomeData)
.Select(() => bAlias.Id).WithAlias(() => resultAlias.BId)
.Select(() => bAlias.Deleted).WithAlias(() => resultAlias.Deleted)
.Select(() => bAlias.Number).WithAlias(() => resultAlias.Number))
.TransformUsing(Transformers.AliasToBean<DTO>())
.List<DTO>();
DTO如下所示:
SELECT A.ID, A.someData, B.ID AS BID, B.DELETED, B.Number
FROM objectA_Table A
FULL OUTER JOIN objectB_Table B ON A.ID = B.ID
public class DTO
{
public Guid AId { get; set; }
public string SomeData { get; set; }
public Guid BId { get; set; }
public bool Deleted { get; set; }
public int Number { get; set; }
}
这应该是可能的。你能展示一下你试图生成的SQL吗?我已经更新了原始帖子,现在包含了我需要的SQL示例。