0

有人可以确认我已经编写了 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);
}

希望上面的代码指定一个订单有一个可选的信用卡,但信用卡需要一个订单。

4

2 回答 2

0

在 EF 中,1:1 和 1:0..1(甚至 0..1:0..1)关系要求主键在所有相关实体之间共享。你CreditCardIdOrderId价值观必须一致。

您的配置旨在正确指定关系,但 in 的OrderId属性CreditCart是多余的,可能会导致问题。在CreditCard您可能需要标记CreditCardId为不是服务器生成的。

于 2013-11-13T21:11:07.270 回答
0

如果您使用的是 o/r 映射器,例如 Entity Framework 或 NHibernate,我会将其建模为一对多并使用公共属性将集合限制为一项(实际上我不知道这是否可能在英法)。基本上,我将其视为 1:n,其中 n 由业务规则设置。我不喜欢这个解决方案,但根据我的经验,这是建模它的最佳方式,而且在过去的近四年里我还没有找到更好的解决方案

于 2013-11-13T21:11:23.487 回答