/ / ASP.NET MVC klasy POCO i sprawdzanie poprawności - asp.net-mvc, entity-framework, poco

ASP.NET MVC klasy POCO i sprawdzanie poprawności - asp.net-mvc, entity-framework, poco

Mam trzy projekty / biblioteki.

SiteService (usługa WCF)
SiteModel (obiekty POCO)
SiteMVC (aplikacja internetowa)

W mojej bibliotece SiteModel mam tylko POCOobiekty. Obiekty te są generowane przez szablon t4, więc wolę nie zmieniać niczego. SiteService używa tych obiektów POCO i serializuje je (to jest powód używania obiektów POCO zamiast wygenerowanych klas od projektanta EF)

W aplikacji sieciowej chcę użyć sprawdzania poprawnościte obiekty POCO. Chcę, aby moja biblioteka modeli była jak najbardziej czysta i nie używał funkcji DataAnnotations, ponieważ reguły mogą się różnić w zależności od aplikacji.

Jaki jest najlepszy sposób sprawdzania poprawności w ASP.NET MVC2? Czy można używać DataAnnotations (klasy znajomych)?

Odpowiedzi:

3 dla odpowiedzi № 1

Jeśli twój szablon T4 generuje klasy częściowe, oznacza to, że masz szczęście.

Możesz stworzyć oddzielną definicję częściową i udekorować ją MetadataType:

// T4 Generated Code
public partial class Item
{
public int Id { get; set; }
public string Name { get; set; }
}

// Your partial in a separate file
[MetadataType(typeof(ItemValidation))]
public partial class Item
{
}

// Any DataAnnotations go here
public partial class ItemValidation
{
[Required(ErrorMessage = "You need to have a Name!")]
public string Name { get; set; }
}

W przeciwnym razie jedyną opcją będzie tworzenie ViewModels z DataAnnotations w Web Project, a następnie mapowanie pomiędzy Twoimi modelami (czyste obiekty POCO) i ViewModels.


0 dla odpowiedzi nr 2

FYI. Podczas gdy klasa cząstkowa działa. Jeśli używasz RIA lub WCF i chcesz, aby właściwość pojawiła się, musisz dodać atrybut [DataMember].

public partial class Employee
{
[DataMember]
public string ComposedName
{
get
{
return String.Format("{0}, {1}", this.LastName, this.FirstName);
}
set
{ throw new NotImplementedException(); }
}
}