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