[英]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.