Entity framework 每个层次结构的EF表(TPH)未保存,因为无法在鉴别器列中插入值null

Entity framework 每个层次结构的EF表(TPH)未保存,因为无法在鉴别器列中插入值null,entity-framework,table-per-hierarchy,Entity Framework,Table Per Hierarchy,我有一个用于multiply type of category的表,它包含一个名为“ClassName”的鉴别器列,用于指定要加载的对象的类型。ClassName列不可为空,默认值为“Category” 我的问题是,保存新项目时,出现以下错误: “无法将值null插入到列ClassName”表类别中 我认为ef将根据新对象类设置ClassName值。 如何使用正确的“ClassName”值保存对象?我将数据库结构更改为接受null。如果对象名与表名匹配,EF将设置null,并将为派生类设置离散器

我有一个用于multiply type of category的表,它包含一个名为“ClassName”的鉴别器列,用于指定要加载的对象的类型。ClassName列不可为空,默认值为“Category”

我的问题是,保存新项目时,出现以下错误: “无法将值null插入到列ClassName”表类别中

我认为ef将根据新对象类设置ClassName值。
如何使用正确的“ClassName”值保存对象?

我将数据库结构更改为接受null。如果对象名与表名匹配,EF将设置null,并将为派生类设置离散器名。

这是一个老问题,但我今天刚刚遇到它。在.NET4.0代码中,首先我没有遇到免责声明栏,但当降级到NET3.5时,这让我一天都很累。 这是我的解决方案

使用ALTERTABLE将数据库中的列更改为允许NULL
并更新edmx文件,使其更新changeallow null

Yes,EF应该关心TPH映射中的鉴别器列值。我认为您必须显示代码,因为您的实体或映射中可能存在不正确的地方。例如,您是否已配置鉴别器列名为ClassName,这不是默认值?我使用UI在edmx中设置鉴别器,右键单击表格,选择表格映射,在“映射到我设置的类别”中,当ClassName=CategoryRoot时,它工作正常并创建我的CategoryRoot对象,但是在我的类别中,当我添加一个新的类别时,classname值被设置为null,而我想被设置为category。我将查找如何设置鉴别器