实体框架数据建模最佳实践

时间:2012-06-17 14:24:30

标签: 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; }
}

正如您所见,用户可以拥有产品,仓库也可以拥有产品。因此,实体框架将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; }
}

第一个设计看起来更简单,但没有引入新的权利,但不确定它是否更好。

我试图找出哪个是最好的,哪个圆周使其中一个更好。

1 个答案:

答案 0 :(得分:1)

也可以继承(EF / Code First):

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 */
}

在我的观点中,这更干燥=&gt; “Code First view”。

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