基于视图生成实体框架:可空类型

时间:2010-10-27 15:06:03

标签: entity-framework entity-framework-4 nullable

EF生成的类中的某些属性是可空的,有些不是。

我的第一直觉是,这应该由sp_help MyView返回的Nullable属性驱动。但事实似乎并非如此。

我的一些由sp_help作为Nullable返回的类型生成为Nullable,而其他类型生成为bool而不是Nullable * bool *

它是由什么驱动的,是否有任何方法可以通过视图来控制它?

作为测试,我创建了ViewA,而不是ViewB,它选择了ViewA中的所有列。令我惊讶的是,从这些观点中创建的实体并不完全相同。某些属性仅在ViewB中可以为空。

1 个答案:

答案 0 :(得分:1)

您的预感是正确的,EF根据您的商店架构创建Nullable属性,而Views也不例外。换句话说,生成的实体对象应该(并且将会)准确地反映您的View架构,并且您可以找到问题的方法:

首先,您需要确保已将DB View正确导入模型:
为此,在XML编辑器中打开您的EDM,转到 SSDL内容并找到<EntityType Name="yourDbViewName">然后查看<Property Name="yourFieldName" Type="int" Nullable="false" />确保每个字段都具有{的正确值{1}}属性。由于默认值为true,因此EF只会将此属性设置为 NOT Null 字段。

从EF4开始,VS2010使用T4模板生成实体对象。深入研究这个T4揭示了如何根据Nullablity生成对象:

Nullable

正如您所看到的,EF使用 MetadataTools 来确定属性是否为Nullable,而 MetadataTools 基本上包含访问代码生成所需的Entity Framework元数据的辅助方法,这意味着它查看您的EDM以获取此信息。当然,您可以更改此模板并对其进行自定义,但是为了根据您的数据库视图控制Nullable类型,您不需要,因为它已经存在。

相关问题