让 Entity Framework 将 LONG 设置为零,而不是要求可空 属性

Getting Entity Framework to set LONGs to zero instead of requiring a nullable property

我们有一个数据库优先的 Entity Framework 6.1.3 项目正在序列化为基于 Java 的缓存产品(除了正常的 SQL 服务器持久性之外)。因此,项目中域 类 的 none 可以具有可为空的 LONG。它们与 GemFire 不兼容。只能使用普通的 LONG。

但是我们的基础 SQL 服务器数据库中确实有 NULL(在其 BIGINT 列中)。通常这只是通过在 属性:

中添加一个问号来处理
public long? SomeProperty { get; set; }

在我们的例子中,我们需要一种让 Entity Framework 不带问号的方法。 属性 需要是一个直的 LONG;如果基础行具有 NULL,Entity Framework 应将其设置为零。也许 EF fluent API 提供了一种方法来做到这一点?我正在想象这样的事情:

Property(t => t.SomeProperty).HasColumnName("SomeProperty").IsOptional();

不用说,那是行不通的(无论如何,正如所写的那样)。我仍然收到以下异常:

The 'SomeProperty' property on 'MyDomainClass' could not be set to a 'null' value. You must set this property to a non-null value of type 'System.Int64'.

有人知道在 C# 中不将 属性 标记为可为 null 的情况下让 EF 容忍 BIGINT 列中的 NULL 的方法吗?

一种实用的方法是,而不是 table,从具有 "not null" 个字段的原始 table 创建一个视图馈送:

CREATE VIEW MY_TABLE_VIEW
AS
   ...
   ISNULL(SOME_PROPERTY, 0) AS SOME_PROPERTY
   ...

由于项目s/environment的限制是未知的,所以很难确定它是否适合你。