将long数据属性映射到数据库中的int

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,8089,223,372,036,854,775,807 int -2,147,483,6482,147,483,647

参考文献: