【问题标题】:How to add data annotations to partial class?如何向部分类添加数据注释?
【发布时间】:2011-09-02 04:05:53
【问题描述】:

我有一个自动生成的类,上面有一个属性。我想在同一类型的另一个部分类中向该属性添加一些数据注释。我该怎么做?

namespace MyApp.BusinessObjects
{
    [DataContract(IsReference = true)]
    public partial class SomeClass: IObjectWithChangeTracker, INotifyPropertyChanged
    {
            [DataMember]
            public string Name
            {
                get { return _name; }
                set
                {
                    if (_name != value)
                    {
                        _name = value;
                        OnPropertyChanged("Name");
                    }
                }
            }
            private string _name;
    }
}

在另一个文件中我有:

namespace MyApp.BusinessObjects
{
    public partial class SomeClass
    {
        private SomeClass()
        {
        }

        [Required]
        public string Name{ get; set; }
    }
}

目前,我收到一条错误消息,指出 name 属性已存在。

【问题讨论】:

  • 如果这是可能的,我会感到惊讶 - 你最好改变类的自动生成方式以允许在那里指定注释。
  • @Will - 是的,我得到的错误表明这是不可能的,希望有比更改自动生成代码更好的方法。

标签: c# .net data-annotations partial-classes


【解决方案1】:

看起来我找到了一种与上面链接类似的不同方式,使用MetadataTypeAttribute

namespace MyApp.BusinessObjects
{
    [MetadataTypeAttribute(typeof(SomeClass.Metadata))]{
    public partial class SomeClass
    {
        internal sealed class Metadata
        {
            private Metadata()
            {
            }

            [Required]
            public string Name{ get; set; }
        }
    }
}

【讨论】:

    【解决方案2】:

    我正在使用以下内容来支持同一个表中引用同一个表的多个外键。例如,这个人有两个父母(父亲和母亲),他们都是 Person 类。

    [MetadataTypeAttribute(typeof(SomeClassCustomMetaData))]
    public partial class SomeClass
    {
    
    }
    
    public class SomeClassCustomMetaData
    {
        [Required]
        public string Name { get; set; }
        [InverseProperty("Father")]
        public virtual Parent ParentClass { get; set; }
        [InverseProperty("Mother")]
        public virtual Parent ParentClass1 { get; set; }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 1970-01-01
      • 2014-04-02
      相关资源
      最近更新 更多