C# 全外接无纤

C# 全外接无纤,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

我试图在fluent nhibernate中进行完整的外部连接,但是我似乎无法找到正确的语法来让这个方法工作

我试过加入alias和projections,但两者都不起作用

例如,如果我有两个对象(A和B),我需要得到所有的对象A和对象B,但它们可能并不总是有完整的关系。对象A与对象B有关系,但我可能有与对象A完全无关的对象B,也可能有与对象B没有任何关系的对象A

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示例。