标识列未应用于数据库

时间:2017-08-16 02:29:13

标签: c# sql-server entity-framework entity-framework-6

我有一个类'BudgetDetail',就像这样:

public class BudgetDetail
{
    public int Id { get; set; }
    public Budget Budget{ get; set; }
    public int BudgetId { get; set; }
    public Product Product { get; set; }
    public int ProductId { get; set; }
    public byte Quantity { get; set; }
    public int Price { get; set; }
    public int Iva { get; set; }
    public int Total { get; set; }
}

这是此模型的Fluent API配置:

public class BudgetDetailConfiguration: EntityTypeConfiguration<BudgetDetail>
{
    public BudgetDetailConfiguration()
    {
        ToTable("BudgetDetails");

        HasKey(pd => new { pd.Id, pd.BudgetId, pd.ProductId });

        Property(pd => pd.Id)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
    }
}

当我进行迁移时,Id属性的标识设置为true但是如果我查看数据库中的标识它被设置为false而我不知道为什么,我想这是因为我有复合这张桌子的钥匙。

如果您有复合键,

标识列不起作用吗?

1 个答案:

答案 0 :(得分:1)

您有一个BudgetId和一个预算 - 与产品相同。添加两者并不意味着它们是相关的。 Budget对象与BudgetId无关 - BudgetDetails类有两个不同的属性 - 一个是BudgetId(FK),另一个是实际的Budget对象。

删除你的对象并保留他们的PK - 它们是BudgetDetail类中的FK。

public class BudgetDetail
{
    public int Id { get; set; }
    // public Budget Budget{ get; set; }
    public int BudgetId { get; set; }
    // public Product Product { get; set; }
    public int ProductId { get; set; }
    .../...
}