对于EF6中的bigint列,请使用int Id

Sav*_*age 5 c# entity-framework entity-framework-6

我们正在使用Entity Framework 6在具有类型的Id列的旧Sql Server数据库之上构建数据层bigint.我们希望使用int我们的Id列类型而不是long,我们相信这些表永远不会超出一个大小限制int.

但是,我们收到以下错误:

从物化的"System.Int64"类型到"System.Int32"类型的指定强制转换无效.

如何在不修改db列类型的情况下实现我们想要的目标?

Col*_*lin 12

您应该能够OnModelCreating为每个受影响的模型指定方法中列的DataType :

modelBuilder.Entity<Department>()   
    .Property(p => p.Id)   
    .HasColumnType("bigint");
Run Code Online (Sandbox Code Playgroud)

如果每个模型中的每个Id都映射到a bigint,那么您可以使用自定义约定:

modelBuilder.Properties<int>()
   .Where(p => p.Name == "Id")
   .Configure(c => c.HasColumnType("bigint"));
Run Code Online (Sandbox Code Playgroud)

另一种技术是为所有具有a的模型使用抽象基类bigint Id(这个例子使用数据注释而不是流畅的API来显示它:

public abstract class BaseModel
{
   [Column(TypeName="bigint")]
   public int Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

参考文献:

配置列的数据类型

自定义约定

  • 只有在值超过 int 限制的情况下才会抛出异常吗? (2认同)