kri*_*gar 5 c# entity-framework entity-framework-6
在我看过的所有示例中都使用int32s作为ID.这在生产环境中并不总是实用的.我们的一些数据库具有int64s 领域的身份ID ,因此我们的做法是始终使用long我们的ID属性.但是,SQL Server具有更高的int列类型的最大值.
我正在使用Entity Framework版本6进行第一次概念验证.使用它long ID,它无法将对象映射到数据库.
我正在使用Fluent API进行所有映射.现在,它看起来像ID:
Property(s => s.ID).HasColumnName("spcID");
Run Code Online (Sandbox Code Playgroud)
如果我.HasColumnType("int")在上面的末尾添加一个,它会给我以下错误:
指定的架构无效.错误:(7,12):错误2019:指定的成员映射无效."EFConnection.Space"类型中成员"ID"的类型"Edm.Int64 [Nullable = False,DefaultValue =]"与成员的"SqlServer.int [Nullable = False,DefaultValue =,StoreGeneratedPattern = Identity]"不兼容'CodeFirstDatabaseSchema.Space'类型中的'spcID'.
如何将这些数据类型映射到.NET中的长变量?
编辑
现在,我有一个简单的集成测试设置,以确保我可以连接:
[TestMethod]
public void TestMethod1() {
using (var context = new Context()) {
Assert.IsTrue(context.Spaces.Any());
Assert.IsTrue(context.Spaces.First().IsActive);
}
}
Run Code Online (Sandbox Code Playgroud)
没有.HasColumnType("int"),第一个Assert通过,但我得到InvalidOperationException了第二个:
'Space'上的'ID'属性无法设置为'System.Int32'值.您必须将此属性设置为类型为"System.Int64"的非null值.
Tre*_*ley 11
C#和SQL数据类型兼容:
如果您的列具有bigint使用public long Id { get; set; }列,则int使用该列public int Id { get; set; }
SQL
bigint -9,223,372,036,854,775,808to 9,223,372,036,854,775,807
int -2,147,483,648to2,147,483,647
C#
长-9,223,372,036,854,775,808到9,223,372,036,854,775,807
int -2,147,483,648到2,147,483,647
参考文献: