可以在实体框架Codefirst中使用接口创建我的模型?

我是新来的实体框架,我正在练习CodeFirst。 我的问题是我正在创建一个模型类,我希望该类从其他两个类继承。 例如,员工拥有个人信息,例如名字,中间名,姓氏等......它还具有联系信息,例如地址,电话,电子邮件等......学生也具有这些属性。 我将这些信息分为两类的原因是,另一个实体也可以拥有联系信息,但没有个人信息,如公司,学校,医院,仓库等。

示例代码:


    public class ContactInfo
    {
    public string Address { get; set; }
    public string Email { get; set; }
    public string Phone { get; set; }
    }


    public class PersonalInfo
    {
    public string Firstname { get; set; }
    public string Middlename { get; set; }
    public string Lastname { get; set; }
    }


    public class Employee : // This should be inheriting from PersonalInfo and ContactInfo
    {
    public int EmployeeID { get; set; }
    }


    public class Supplier : ContactInfo // Inheriting from ContactInfo and no PersonalInfo
    {
    public int SupplierID { get; set; }
    public string Name { get; set; }
    }



我想要做的是创建要由Employee继承的接口(IPersonalInfo,IContactInfo),以便它看起来像这样:


    public class Employee : IPersonalInfo,IContactInfo
    {
    public int EmployeeID { get; set; }
    }



这是一个很好的做法吗? 如果不是,我该如何处理这种情况......谢谢!


YS,你必须在模型中定义继承。 之后,确保你定义了一对/多对一/多关系。 请参阅这里的链接,好教程。

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-inheritance-with-the-entity-framework-in-an-asp-net-mvc-application


首先,这听起来像你在混淆继承和组合。 继承的一个例子是拥有一个通用的Person基类,你可以继承Employee或Student。 组合的一个例子是一个Employee和一个Supplier,每个都由一个共同的ContactInfo对象组成,但没有公共基类。

当你设计实体时,你真的在​​设计底层关系数据库的表结构。 您可以为继承建模:一个公共基类可以由其自己的表和任何公用的字段来表示,并且任何特定的类都可以在它们自己的表中使用连接到公用表的外键。 这样做可能会也可能没有意义 - 通过将事情分解成单独的表格,您将为查询添加另一个连接。 这会降低性能。

组合也可以在关系数据库中表示,但只有在许多其他数据实体共享的公共组件之间才有意义。 ContactInfo对于给定的人员/供应商来说几乎总是唯一的,所以将它分解成单独的表格是没有意义的 - 您只是添加一个额外的表格连接,这会再次降低性能您的查询。

您应该考虑将继承/构图移动到设计中的某一层。 实体(数据访问层)应该匹配关系数据库,但是领域模型(即业务对象层)应该遵循面向对象的原则。

链接地址: http://www.djcxy.com/p/60449.html

上一篇: Can use interfaces in creating my models in Entity Framework Codefirst?

下一篇: Weird data binding behavior in ASP.NET MVC3?