获取Entity Framework将LONG设置为零而不需要可为空的属性

问题描述:

我们有一个数据库优先的Entity Framework 6.1.3项目,该项目正在序列化为基于Java的高速缓存产品(除了普通的SQL Server持久性以外)。因此,项目中的域类都不能有空的LONG。它们与GemFire不兼容。只能使用正常的LONG。获取Entity Framework将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#可空?

+0

它说可空的多头与Gemfire/Geode不兼容?这听起来不合适。 – rupweb

一个实际的做法是,而不是表,创建具有“非空”字段的原始表喂养观点:

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

由于项目/环境的限制是未知的,这是很难肯定告诉它是否会为你工作。