代码之家  ›  专栏  ›  技术社区  ›  sHr0oMaN

实体框架、未映射属性和动态数据

  •  1
  • sHr0oMaN  · 技术社区  · 15 年前

    我使用实体框架数据模型来驱动一个动态数据网站,供用户更新数据。

    其中一个实体包含不可为空的字符串属性(描述)。在数据库中,其中一行的描述为空(不是空,而是空字符串)。当我尝试更新描述时,得到以下验证错误:“此属性不能设置为空值”。 如果我手动更新数据库中的描述,然后编辑属性,它将按预期工作。但只要我将数据库中的描述改回空字符串,就会发生验证错误。错误发生在描述的setter上。

    因此,我尝试添加一个名为customdescription的附加字符串属性,它基本上包装了描述,使描述成为实体元数据中的scaffoldcolumn(false),并将新属性添加到实体元数据中。

        [ScaffoldColumn(true)]
        public string CustomDescription
        {
            get { return this.Description; }
            set {
                if (value == null)
                {
                    value = string.Empty;
                }
                this.Description = value;
            }
        }
    

    但是,要使此属性显示在动态数据站点上,需要向其添加什么?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Vladimir Mitic    13 年前

    问题是,在非可空字段中,旧值为空字符串。 默认情况下,框架正在将其转换为空。 要修复错误,只需将以下属性添加到字段中:

    [DisplayFormat(ConvertEmptyStringToNull = false)]
    public object Description { get; set; } 
    
        2
  •  0
  •   Ash Machine    14 年前

    在相应的元数据类中,只需将其作为实际字段引用即可:

        [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; }        
    }