Как добавить аннотации данных в частичный класс? - PullRequest
13 голосов
/ 26 мая 2011

У меня есть автоматически сгенерированный класс со свойством. Я хочу добавить некоторые аннотации данных к этому свойству в другом частичном классе того же типа. Как бы я это сделал?

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 уже существует.

Ответы [ 2 ]

17 голосов
/ 26 мая 2011

Похоже, я понял другой способ, похожий на ссылку выше, используя MetadataTypeAttribute:

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

            [Required]
            public string Name{ get; set; }
        }
    }
}
1 голос
/ 29 мая 2017

Я использую ниже также для поддержки нескольких внешних ключей в одной таблице, которые ссылаются на одну таблицу Например, у человека есть два родителя (отец и мать), которые оба относятся к классу 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; }
}
...