EF 7 beta 6:EF 7中具有一對多關係的實體

c# entity-framework entity-framework-core

我有一個非常簡單的模型:

class Bag
{
    public int Id { get; set; }
    public ICollection<RandomThing> RandomThings { get; set; }
}

class RandomThing
{
    public int Id { get; set; }
    public String Description{ get; set; }
}

我的上下文的OnModelCreating (在EF 6中 )類似於:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<Bag>()
        .ToTable("Bag")
        .HasMany(x => x.RandomThings).WithRequired(x => x.Bag).WillCascadeOnDelete();

    modelBuilder.Entity<RandomThing>().ToTable("RandomThing");
}

據我所知,沒有相同的方法可以做到這一點。我知道不支持級聯刪除 。但是,我想知道,在我的代碼示例中定義的一對多關係建模的最佳方法是什麼?似乎所有這些東西已經消失(或者尚未實施)。

我已經看到了一個DbContext的示例( 這裡 ),就像我想要的那樣,但它實際上是錯誤的並且不起作用。如果我嘗試下載該源代碼,設置我的環境,並在帶有帖子的博客實體上進行保存,那些帖子就不會像人們想像的那樣得到保存。

這有什麼變通方法嗎?

一般承認的答案

更新 :這個答案是為EF7 beta7編寫的。 API已經改變了。有關使用EF Core的最新信息,請參見http://docs.efproject.net/en/latest/modeling/relationships.html

原始答案

在EF 7中,您可以在OnModelCreating方法中配置一對多關係。為此,請將屬性添加到R​​andomThing以表示forign鍵,以及對父類型的CLR引用。

class Bag
{
    public int Id { get; set; }
    public ICollection<RandomThing> RandomThings { get; set; }
}

class RandomThing
{
    public int Id { get; set; }
    public String Description{ get; set; }

    public Bag Bag { get; set; }
    public int BagId { get; set; }
}

在您的上下文中,使用以下設置配置關係:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{  
    modelBuilder.Entity<RandomThing>()
        .Reference(e => e.Bag)
        .InverseCollection(p => p.RandomThings)
        .ForeignKey(e => e.BagId);
}

附註 :當EF 7 計劃添加對通過屬性進行配置的支持時


熱門答案

雖然我根本沒有使用EF7,但在EF6中,我會讓你的模型看起來像這樣:

class Bag
{
    public int Id { get; set; }
    public virtual ICollection<RandomThing> RandomThings { get; set; }
}

class RandomThing
{
    public int Id { get; set; }
    public String Description{ get; set; }

    public int BagId {get; set;}
    [ForeignKey("BagId")]
    Public Bag Bag {get; set;}
}

通過這種方式,可以使用數據註釋來處理關係,並且您不需要針對此特定任務的model builder



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow