【问题标题】:Entity Framework, unmapped property and Dynamic Data实体框架、未映射的属性和动态数据
【发布时间】:2010-04-26 02:43:55
【问题描述】:

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

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

所以我尝试添加一个名为 CustomDescription 的附加字符串属性,它基本上包装了描述,在实体的元数据中将描述设为 ScaffoldColumn(false),并将新属性添加到实体的元数据中。

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

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

【问题讨论】:

    标签: entity-framework dynamic-data


    【解决方案1】:

    问题是旧值是 Non-Nullable 字段中的空字符串。 默认情况下,框架将其转换为 null。 要修复错误,只需将以下属性添加到您的字段:

    [DisplayFormat(ConvertEmptyStringToNull = false)]
    public object Description { get; set; } 
    

    【讨论】:

      【解决方案2】:

      在相应的元数据类中,只需像引用实际字段一样引用它:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多