Entity framework 实体框架、未映射属性和动态数据
我使用一个实体框架数据模型来驱动一个动态数据网站,供用户更新数据 其中一个实体包含不可为空的字符串属性(说明)。在数据库中,其中一行的描述为空(不是null,而是空字符串)。当我尝试更新描述时,我得到以下验证错误:“此属性不能设置为空值”。 如果我手动更新数据库中的描述,然后编辑属性,它将按预期工作。但是,只要我将数据库中的描述更改回空字符串,就会发生验证错误。错误发生在描述的setter上 因此,我尝试添加一个名为CustomDescription的附加字符串属性,该属性基本上包装了描述,在实体的元数据中使描述成为ScaffoldColumn(false),并将新属性添加到实体的元数据中Entity framework 实体框架、未映射属性和动态数据,entity-framework,dynamic-data,Entity Framework,Dynamic Data,我使用一个实体框架数据模型来驱动一个动态数据网站,供用户更新数据 其中一个实体包含不可为空的字符串属性(说明)。在数据库中,其中一行的描述为空(不是null,而是空字符串)。当我尝试更新描述时,我得到以下验证错误:“此属性不能设置为空值”。 如果我手动更新数据库中的描述,然后编辑属性,它将按预期工作。但是,只要我将数据库中的描述更改回空字符串,就会发生验证错误。错误发生在描述的setter上 因此,我尝试添加一个名为CustomDescription的附加字符串属性,该属性基本上包装了描述,在实
[ScaffoldColumn(true)]
public string CustomDescription
{
get { return this.Description; }
set {
if (value == null)
{
value = string.Empty;
}
this.Description = value;
}
}
但是,为了使该属性显示在动态数据站点上,我需要向该属性添加什么内容?在相应的元数据类中,只需将其作为实际字段引用即可:
[MetadataType(typeof(MyClassMetadata))]
public partial class MyClass
{
[ScaffoldColumn(true)]
public string CustomString
{
return "foo";
}
}
public class MyClassMetadata
{
[Display(Name = "Custom")]
public object CustomString { get; set; }
}
在相应的元数据类中,只需像引用实际字段一样引用它:
[MetadataType(typeof(MyClassMetadata))]
public partial class MyClass
{
[ScaffoldColumn(true)]
public string CustomString
{
return "foo";
}
}
public class MyClassMetadata
{
[Display(Name = "Custom")]
public object CustomString { get; set; }
}
问题是旧值在不可为空的字段中是空字符串。 默认情况下,框架将其转换为null。 要修复此错误,只需将以下属性添加到字段:
[DisplayFormat(ConvertEmptyStringToNull = false)]
public object Description { get; set; }
问题是旧值在不可为空的字段中是空字符串。 默认情况下,框架将其转换为null。 要修复此错误,只需将以下属性添加到字段:
[DisplayFormat(ConvertEmptyStringToNull = false)]
public object Description { get; set; }