有人可以确认我已经编码了2个POCO类之间的正确关系,这样我就有了一个可以有0或1个CreditCard对象的Order对象和一个必须属于Order的CreditCard对象(为简洁起见,删除了一些类属性)
public class Order
{
public int OrderId { get; set; }
public string Username { get; set; }
public string Address { get; set; }
public string City { get; set; }
public decimal Total { get; set; }
public CreditCard CreditCard { get; set; }
}
public class CreditCard
{
public int CreditCardId { get; set; }
public int OrderId { get; set; }
public CardType Type { get; set; }
public string Number { get; set; }
public Order Order { get; set; }
}
在我的OnModelCreating方法中,我有以下内容:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Order>().HasOptional(or => or.CreditCard).WithRequired(lu => lu.Order);
}
希望上面的代码指定订单有可选的CreditCard,但信用卡需要订单。
答案 0 :(得分:0)
在EF中,所有相关实体之间的1:1和1:0..1(甚至0..1:0..1)关系require that the primary key is shared。您的CreditCardId
和OrderId
值必须相同。
您的配置似乎正确指定了关系,但OrderId
中的CreditCart
属性是多余的,可能会导致问题。在CreditCard
中,您可能需要将CreditCardId
标记为不是由服务器生成的。
答案 1 :(得分:0)
如果您使用的是o / r映射器,例如Entity Framework或NHibernate,我会将其建模为一对多并使用公共属性将集合限制为一个项目(实际上我不知道是否可以在EF)。基本上,我将其视为1:n,其中n由业务规则设置。我不喜欢这个解决方案,但根据我的经验,这是建模它的最佳方式I haven't found a better solution in the last almost four years。