Каков наилучший способ добавить атрибуты к автоматически сгенерированным объектам (используя VS2010 и EF4) - PullRequest
4 голосов
/ 06 января 2011

ASP.NET MVC2 имеет сильную поддержку для использования атрибутов на сущностях (проверка, расширение вспомогательного класса Html и т. Д.).

Если я сгенерировал свою модель из базы данных, используя модель данных объекта VS2010 EF4 (edmx и ее класс cs), и я хочу добавить атрибуты на некоторых объектах. что было бы лучшей практикой? как мне справиться с обновлением модели (добавление дополнительных полей / таблиц в базу данных и объединение их в edmx) - сохранит ли мои атрибуты или сгенерирует новый файл cs, удаляющий все?

(ручные изменения в этом файле могут привести к неожиданное поведение в вашем приложение.)

(ручные изменения к этому файл будет перезаписан, если код регенерируется.)

Ответы [ 3 ]

4 голосов
/ 06 января 2011

Обычно вы создаете так называемые частичные классы для расширения ваших автоматически сгенерированных объектов.

Добавление атрибутов к сгенерированным классам

1 голос
/ 09 января 2011

С понятием «класс приятелей», связанным выше, и аннотациями данных я использую этот метод расширения.Я забыл, где я его взял, так что слава оригинальному автору.

Мы используем его как

 List<ValidationResult> errorList = new List<ValidationResult>();
        bool bValid = client.IsValid<Client, ClientMetadata>(ref errorList, false);


    public static bool IsValid<T, U>(this T obj, ref List<ValidationResult> errors, bool validateAllProperties = true) where T : IValidatableObject
    {
        //If metadata class type has been passed in that's different from the class to be validated, register the association
        if (typeof(T) != typeof(U))
        {
            TypeDescriptor.AddProviderTransparent(new AssociatedMetadataTypeTypeDescriptionProvider(typeof(T), typeof(U)), typeof(T));
        }

        var validationContext = new ValidationContext(obj, null, null);
        var validationResults = new List<ValidationResult>();
        Validator.TryValidateObject(obj, validationContext, validationResults, validateAllProperties);

        errors = validationResults;

        if (validationResults.Count > 0)
            return false;
        else
            return true;
    }
0 голосов
/ 06 января 2011

Мы используем частичные классы, но если вам нужно, чтобы они сохранялись и обрабатывались EF, опция «Обновить модель из базы данных» - ваш лучший друг.

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