簡體   English   中英

您如何首先在Entity Framework代碼中設置不同類型的一對多關系?

[英]How would you setup a one to many relationship of different types in Entity Framework code first?

這是我的設計。 我在考慮父對象在哪里有子對象的集合,每個子對象可以是存儲在數據庫獨立表中的不同類型的對象。

在我的設計中,每天匯總到分配給用戶的Report對象中。 該報告對象可以具有多個活動。 但是,這些活動可以是不同類型的對象。 就像一項活動可能是食物,另一項活動可能是運動。 我很好奇,是否存在除我目前的EF設計之外的另一種解決方法。

我的報表對象無法導航到子級。 但是,每個子項(例如DbSet或DbSet)都具有指向父Report對象的鏈接。 擁有Report對象很重要,因為它鏈接到目標信息並有助於建立根據目標匯總數據的基礎。

有沒有一種方法可以設置一個父對象,以便它可以有多個子對象的子集合,或者可以設置映射,以便如果刪除父報表,那么它將級聯到子活動? 還是您會以不同的方式去做? 謝謝

繼承是用於將不同類型容納到單個集合中的方法。 創建一個基本的Activity類型,在其中放置通用屬性(以及其父類的導航屬性),然后為每種不同的Activity類型創建一個子類型並添加其特定屬性。 我不明白父對象和報表對象是否是同一對象,因此我將假設不是,並定義這兩個類。

public class Parent
{
    public int Id { get; set; }
    public ICollection<Activity> Activities { get; set; }
}

public class Report
{
    public int Id { get; set; }
}

public abstract class Activity
{
    public int Id { get; set; }
    public virtual Parent Parent { get; set; }
    public virtual Report Report { get; set; }
    // common activity properties
}

public class Food : Activity
{
    // Food specific properties
}

public class Excercise : Activity
{
    // Exercise specific properties
}

然后,您可以為ParentReportActivity創建一個DbSet。 無需為其子類型創建dbset,但是可以(如果需要)創建它。

public DbSet<Parent> Parents { get; set; }
public DbSet<Report> Reports { get; set; }
public DbSet<Activity> Activities { get; set; }

您可以通過以下方式查詢特定的活動子類型:

var indoorExercises = context.Activities.OfType<Exercise>().Where(e => e.IsIndoor);

您可以通過此鏈接獲取更多信息: http : //weblogs.asp.net/manavi/archive/2010/12/24/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1每個層次結構表tph.aspx

暫無
暫無

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

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