实体框架4.1代码优先将KeyAttribute作为非标识列

Ben*_*rth 12 entity-framework entity-framework-4.1 azure-sql-database

我遇到了代码优先模型的问题.数据现在在数据库中,所以我不能使用DropCreateDatabaseIfModelChanges类重新种子数据库,但我需要更改一个表,以便bigint列不是IDENTITY(1,1).我已经成功使用SSMS,但现在我的EF代码说它已经过时了.这是有问题的表的代码:

public class Vote {
    [Required, Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
    public long FacebookUserId { get; set; }
    [Required]
    public Entity Entity { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

所以我改变了我的表模式和我的模型(我认为它是它的反映,但我显然是错的),但EF仍然说我的模型已经过时了,我无法重新播种数据库让它"完美".

任何帮助将非常感激.

谢谢,

本杰明

She*_*wzy 9

使用数据注释:

public class Customer
{
[Key]

    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int CustomerID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

使用流畅的API:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Customer>().Property(c => c.CustomerID).HasDatabaseGeneratedOption(null);
    base.OnModelCreating(modelBuilder);
}
Run Code Online (Sandbox Code Playgroud)


Lad*_*nka 2

尝试将其添加到您的OnModelCreating

modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
Run Code Online (Sandbox Code Playgroud)

这应该消除模型已过期的异常,但在此之前您必须始终手动同步模型和数据库。