c# - Entity Framework 数据建模最佳实践

标签 c# .net entity-framework entity-framework-4.3

我有如下的实体结构

public abstract class Entity
{
    public int Id { get; set; }
}

public class User : Entity
{
    public ICollection<Product> Products { get; set; }
}

public class Warehouse : Entity
{
    public ICollection<Product> Products { get; set; }
}

public class Product : Entity
{
    public Warehouse Warehouse { get; set; }

    public User User { get; set; }
}

如您所见,User 可以有产品,Warehouse 也可以有产品。因此, Entity Framework 将 2 个外键放在可以为 null 的 Product 表上。

我们也可以像下面这样通过一些不同的实体建模来实现类似的结构

 public class User : Entity
 {
    public ICollection<UserProduct> Products { get; set; }
 }

public class Warehouse : Entity
{
    public ICollection<WarehouseProduct> Products { get; set; }
}

public class Product : Entity
{

}

public class WarehouseProduct : Entity
{
    public Product Product { get; set; }
    public Warehouse Warehouse { get; set; }
}

public class UserProduct : Entity
{
    public Product Product { get; set; }
    public User user { get; set; }
}

第一个设计在没有引入新实体的情况下看起来更简单,但不确定它是否更好。

我正在尝试找出哪个是最好的,或者哪个环境使其中一个比另一个更好。

最佳答案

继承也是可能的(EF/CodeFirst):

public abstract class Entity
{
    public int Id { get; set; }
}

public class Product : Entity
{

}

public class Warehouse : Product
{ 
    /* all product fields are available */   
}

public class User : Product
{
    /* all product fields are available */
}

在我看来,这更 DRY =>“CodeFirst 观点”。

关于继承的好帖子:http://goo.gl/1igQ3

关于c# - Entity Framework 数据建模最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11072010/

相关文章:

c# - 检测从ViewModel WPF单击了哪个按钮

c# - 使 "Read Only"对象从 API 包装器返回?

c# - 通用虚拟方法 - 忽略重写方法

c# - 在 ASP.net C# 中,如何将参数从 Javascript 函数传递给 onclick 处理程序

.net - 并发如何在 WCF 中工作?

c# - 创建从两个实体获取数据的 LINQ 查询

entity-framework - 数据库优先验证

c# - 获取单词或数字的所有排列

.net - 用于 PUT 和 POST 的 Angular4 ASP.NET Core 1.2 Windows 身份验证 CORS 给出 401

实体的 linq - 包含 lambda 表达式