我有如下的实体结构
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; }
}
第一个设计看起来更简单,但没有引入新的权利,但不确定它是否更好。
我试图找出哪个是最好的,哪个圆周使其中一个更好。
答案 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