获取实体框架将LONG设置为零而不是要求可为空的属性

时间:2017-10-20 20:59:54

标签: entity-framework entity-framework-6 gemfire

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

但是我们的底层SQL Server数据库(在其BIGINT列中)确实有NULL。通常情况下,这可以通过向属性添加问号来处理:

public long? SomeProperty { get; set; }

在我们的案例中,我们需要一种方法来使实体框架在没有问号的情况下生效。该物业需要直接长;如果基础行具有NULL,则实体框架应将其设置为零。也许EF流畅的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'.

有人知道如何让EF在BIGINT列中容忍NULL而不在C#中将属性标记为可为空吗?

1 个答案:

答案 0 :(得分:0)

一种实用的方法是,而不是表格,从原始表格中创建一个包含“非空”字段的视图:

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

由于项目/环境的限制是未知的,因此很难确定它是否适合您。