我们有一个数据库优先的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#中将属性标记为可为空吗?
答案 0 :(得分:0)
一种实用的方法是,而不是表格,从原始表格中创建一个包含“非空”字段的视图:
CREATE VIEW MY_TABLE_VIEW
AS
...
ISNULL(SOME_PROPERTY, 0) AS SOME_PROPERTY
...
由于项目/环境的限制是未知的,因此很难确定它是否适合您。