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)
参考文献: