Подтвердить что ты не робот

ASP.NET MVC, Linq to SQL Data Annotation Validation

Я пытаюсь реализовать Data Annotation для своих объектов Linq to SQL. Создается файл .dbml, и я не уверен, как добавить аннотацию данных к объектам, не касаясь сгенерированного исходного кода.

Я попытался добавить аннотации данных к отдельному частичному классу объекта, но его не распознавая, не имеет смысла Intelli.

4b9b3361

Ответ 1

Как я уже сказал в своем первоначальном ответе на этот вопрос, вы должны использовать интерфейс. Ответ, опубликованный после моего (который был отмечен как "Принято" ), сказал, чтобы использовать класс. Это не так хорошо. Интерфейс является лучшим вариантом по следующим причинам:

  • Если существует несоответствие между именем в вашем классе LINQ и именем в вашем интерфейсе, компилятор отметит его для вас.
  • Интерфейс не может быть создан, поэтому он защищает пользователей классов от случайного запуска метаданных.
  • Если вы используете Resharper (или аналогичный), интерфейс может быть автоматически извлечен из класса LINQ
  • Интерфейс менее подробный, чем пустой класс
  • Если вы программируете против интерфейсов, а не классов (что является хорошей практикой), то у вас уже есть интерфейс, который вы можете использовать в качестве своего типа метаданных

Для класса, называемого "пользователь", создайте для него интерфейс (например, "IUser" ), а затем обновите определение своего частичного класса пользователя следующим образом:

[MetadataType(typeof(IUser))]
public class User : IUser

Затем в вашем интерфейсе IUser добавьте соответствующие атрибуты Data Annotation для свойств:

[Required]       
[StringLength(50, ErrorMessage = "Username cannot exceed 50 characters")]
string Username { get; set; }

Ответ 2

Для класса, называемого "пользователь", создайте для него интерфейс (например, "IUser" ), а затем обновите определение своего частичного класса пользователя следующим образом:

[MetadataType(typeof(IUser))]
public class User : IUser

Затем в вашем интерфейсе IUser добавьте соответствующие атрибуты Data Annotation для свойств:

[Required]       
[StringLength(50, ErrorMessage = "Username cannot exceed 50 characters")]
string Username { get; set; }

Ответ 3

Linq to SQL генерирует классы объектов как частичные. Простым способом реализации аннотаций данных является создание собственного частичного класса объекта, поместите [MetadataType (typeof (YourDataAnnotationClass)] в частичный класс, который вы создали.

Пример:

// Linq to SQL Class
public partial class Article 
{
   public string Title { get; set; }
   ...... etc
}

Создайте свой собственный класс MetaData с метаданными для каждого поля, которое вы хотите проверить

public class MyMetaDataClass
{
    [Required]
    [Range(5,20)]
    public string Title { get; set; }
}

Создайте Partial Class для класса Object, к которому вы хотите добавить метаданные, в этом случае класс Articles:

[MetadataType(typeof(MyMetaDataClass))]
public partial class Article { }

Примечание: вам не нужно указывать что-либо в классе, а только тип метаданных.

Ответ 4

Спасибо, но проблема MS определяет прототип MetadataTypeAttrubute как

[AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
public sealed class MetadataTypeAttribute : Attribute

Итак, вам пришлось использовать класс, но не интерфейс


Из Китая Лес Ли: 李晓强 [email protected](MSN) [email protected]