实体框架数据建模最佳做法

本文关键字:最佳 建模 框架 数据 实体 | 更新日期: 2023-09-27 18:37:24

>我有如下所示的实体结构

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; }
}

如您所见,用户可以拥有产品,仓库也可以拥有产品。因此,实体框架将 2 个外键放在 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 */
}

在我看来,这更干燥=>"代码第一视图"。

关于继承的好文章:http://goo.gl/1igQ3