Добавление аннотации данных в сгенерированный класс Entity Framework (или Linq to SQL) - PullRequest
7 голосов
/ 02 ноября 2011

Можно ли добавить еще Data Anootation член, такой как Range, Required, ..., к Entity Framework или Linq to SQL сгенерированным классам автоматически?

Я хочу использовать аннотацию данныхпроверка для моих классов

спасибо

Внимание: относится к этой теме: использование метаданных с Entity Framework для проверки с использованием аннотации данных

РЕДАКТИРОВАТЬ 1)

Я создаю модель структуры сущностей для базы данных Northwind и добавляю Product class.a часть кода выглядит следующим образом:

[EdmEntityTypeAttribute(NamespaceName="NorthwindModel", Name="Product")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class Product : EntityObject
{
    #region Factory Method

    /// <summary>
    /// Create a new Product object.
    /// </summary>
    /// <param name="productID">Initial value of the ProductID property.</param>
    /// <param name="productName">Initial value of the ProductName property.</param>
    /// <param name="discontinued">Initial value of the Discontinued property.</param>
    public static Product CreateProduct(global::System.Int32 productID, global::System.String productName, global::System.Boolean discontinued)
    {
        Product product = new Product();
        product.ProductID = productID;
        product.ProductName = productName;
        product.Discontinued = discontinued;
        return product;
    }

    #endregion
    #region Primitive Properties

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    [EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
    [DataMemberAttribute()]
    public global::System.Int32 ProductID
    {
        get
        {
            return _ProductID;
        }
        set
        {
            if (_ProductID != value)
            {
                OnProductIDChanging(value);
                ReportPropertyChanging("ProductID");
                _ProductID = StructuralObject.SetValidValue(value);
                ReportPropertyChanged("ProductID");
                OnProductIDChanged();
            }
        }
    }
    private global::System.Int32 _ProductID;
    partial void OnProductIDChanging(global::System.Int32 value);
    partial void OnProductIDChanged();

Я хочуТребуется ProductID, но я не могу написать код таким образом:

public partial class Product 
    {
        [Required(ErrorMessage="nima")]
        public global::System.Int32 ProductID;

    }

1 Ответ

8 голосов
/ 02 ноября 2011

Да.Вам необходимо создать 2-й частичный класс для каждой сущности и связать его со вспомогательным классом с замещающими свойствами.

Предположим, у вас есть сгенерированный partial class Customer { public string Name { get; set; } }
Сгенерированный класс всегда будет помечен как частичный.

Затем вам нужно добавить файл с:

[MetadataType(typeof(CustomerMetadata))]
public partial class Customer
{
    // it's possible to add logic and non-mapped properties here
}


public class CustomerMetadata
{
    [Required(ErrorMessage="Name is required")] 
    public object Name { get; set; }   // note the 'object' type, can be anything
}

Лично я не считаю это очень элегантным решением, но оно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...