0

好的,我有这个配置在 OrderPage 和它的子 OrderPageShipDate 实例集合之间设置一个识别关系:

public class OrderPageShipDateConfiguration : EntityTypeConfiguration<OrderPageShipDate>
{
    public OrderPageShipDateConfiguration()
    {
        this.HasKey(t => new { t.OrderPageId, t.Id });
        this.Property(p => p.OrderPageId).HasColumnOrder(1);
        this.Property(p => p.Id).HasColumnOrder(2)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        this.HasRequired(opi => opi.OrderPage)
            .WithMany(op => op.ShipDates)
            .HasForeignKey(opi => opi.OrderPageId);
    }

与这些参与者:

/// <summary>
/// This class represents a a set of items added to an order from a particular bulletin at a particular time.
/// </summary>
public class OrderPage : IEntity, IAuditInfo
{       
    #region Construction
    //...
    #endregion

    public int Id { get; set; }

    // other properties...

    public virtual ICollection<OrderPageShipDate> ShipDates { get; set; }
}

_

/// <summary>
/// This class represents a shipping date for an order page that has been added to an order.
/// </summary>
public class OrderPageShipDate : IEntity
{
    #region Construction
    // ...
    #endregion

    public int Id { get; set; }

    public int OrderPageId { get; set; }

    public virtual OrderPage OrderPage { get; set; }

    public DateTime ShipDate { get; set; }
}

我没有在 OrderPageShipDate 表的 Id 列上设置身份规范。

知道为什么吗?

它与这些类实现的 IEntity 接口中指定的 Id 属性有什么关系吗?

如您在此处看到的,我已经尝试过 Data Annotation 方法和 Fluent API 方法。

4

2 回答 2

1

按照惯例,EF 应该选择 Id 作为 key,并在其上加上 identity 属性。我认为 this.HasKey(t => new { t.OrderPageId, t.Id }) 可能是问题所在,你想要一个复合键吗?

于 2013-09-24T22:26:17.393 回答
0

对于没有在数据库中创建身份规范的直接问题,我必须对 Collin 表示赞赏。他让我走上了删除数据库表的正确道路。由于我处于开发阶段,我只是删除了整个数据库并让它重新创建自己。我正在使用数据库迁移,但我没有意识到它不会像那样进行架构更改。

于 2013-09-26T11:39:17.503 回答