我有如下的实体结构
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/