![](/img/trans.png)
[英]Using MVC 3 Entity Framework Code-First, how do you create a new “many” object in a one-to-many relationship?
[英]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
}
然后,您可以為Parent
, Report
和Activity
創建一個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.