簡體   English   中英

Fluent NHibernate:如何將 FK 鍵映射為 .NET Core 版本中的屬性

[英]Fluent NHibernate: How to map FK keys as properties in .NET Core version

我們正在使用流暢的 API,我需要知道如何正確映射它,以便我們可以使用 ParentId 而不必通過 Parent 實體。 那可能嗎? 我知道可以使用 EF Core 來完成,所以我希望有一個類似的解決方案。

public class Parent
{
    public int Id {get;set;}
    public ISet<Child> Children {get;set;}
}

public class Child{
    public int Id {get;set;}
    public int ParentId {get;set;}
    public Parent Parent {get;set;}
}

public static void Main()
{
    var dummyQuery = Enumerable.Empty<Child>();
    //Want to do like this.
    dummyQuery= dummyQuery.Where(c => c.ParentId == 80).ToArray();
    
    //This will do a join to the parent table.
    dummyQuery= dummyQuery.Where(c => c.Parent.Id == 80).ToArray();
}

public class ChildMap : ClassMapping<Child>
{
    public ChildMap ()
    {
        Table("Children");


        //how do I do here?
        ManyToOne(x => x.Parent, map => map.Column("ParentId"));


    }
}
public class Parent
{
    public virtual int Id { get; set; }
    public virtual ISet<Child> Children { get; protected set; } = new HashSet<Child>();
}

public class Child
{
    public virtual int Id { get; set; }
    public virtual Parent Parent { get; set; }
}

public class ParentMap : ClassMapping<Parent>
{
    public ParentMap()
    {
        Id(p => p.Id);

        Set(p => p.Children, m => m.Inverse(true), m => m.OneToMany());
    }
}
public class ChildMap : ClassMapping<Child>
{
    public ChildMap()
    {
        Id(c => c.Id);
        
        ManyToOne(c => c.Parent, map => map.Column("ParentId"));
    }
}

// query
var res = session.Query<Child>().Where(c => c.Parent.Id == 80).ToArray();

通過此映射,我得到以下 sql

select child0_.Id as id1_1_, child0_.ParentId as parentid2_1_ from Child child0_ where child0_.ParentId=@p0;@p0 = 80 [Type: Int32 (0:0:0)]

根本不需要 parentId。 延遲加載可能已禁用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM