Chcę zdefiniować atrybuty [Required]
na złożonym typie w strukturze jednostki. Na przykład mam jednostkę Customer
z opcjonalnym Address
. Obiekt Adres ma wymaganą właściwość PostCode
.Wymagane właściwości w opcjonalnych złożonych typach obiektów Entity Framework
[ComplexType]
public class Address {
public string Address1 { get; set; }
[Required]
public string PostCode { get; set; }
}
public class Customer {
public int CustomerId {get;set;}
public Address Address {get;set;}
}
Nie chcę, aby przechowywać mój typ złożony jako odrębny podmiot (nie jestem w rzeczywistości za pomocą adresu, to po prostu łatwym ilustracją problemu). Nie mogę zostawić Customer.Address NULL, ponieważ to daje błąd:
Null value for non-nullable member. Member: 'Address'.
Gdybym dostarczyć pusty podmiot adresowa, walidacja zawiedzie na polu kod pocztowy ponieważ atrybutu wymagane.
Czy jest jakiś sposób, aby to osiągnąć? Używam EF5/NET4.5.
Naprawdę miałam nadzieję, że zrobię to bez innej jednostki. Zgaduję, że będę musiał przeprowadzić walidację nieco inaczej. Dzięki za potwierdzenie moich podejrzeń! – Richard
To jest naprawdę zła cecha EF. Używając refleksji na obiekcie Address, EF może łatwo ustalić, jakie kolumny utworzyć przy tworzeniu tabeli. Nie musi mieć instancji Adres z jednostki, aby to rozwikłać. A jeśli chodzi o tworzenie/aktualizowanie encji, jeśli właściwość ComplexType miała wartość NULL, co jest trudniejsze w ustawianiu tych kolumn w bazie danych na wartość null? To powinno być łatwym dodatkiem do kolejnej wersji EF IMO. – Ibraheem