Как игнорировать свойство внутренней сущности с MVC3? - PullRequest
1 голос
/ 03 ноября 2011

У меня есть Member сущность со сложным типом, называемым Address, со сложным типом, называемым UsState, который имеет следующие свойства: Id, Name и Iso.

Мне нужно сопоставить адрес участника UsState с его столбцом таблицы БД. Проблема в том, что таблица members содержит только столбец State (VARCHAR), поэтому для правильного отображения я сделал следующее:

modelBuilder.Entity<Member>().Property(p => p.BillingAddress.State.Name).HasColumnName("State");
modelBuilder.Entity<Member>().Ignore(p => p.BillingAddress.State.Id);
modelBuilder.Entity<Member>().Ignore(p => p.BillingAddress.State.Iso);

Но похоже, что Ignore принимает только лямбда-символы базового свойства, поэтому я получил это:

The expression 'p => p.BillingAddress.State.IsoCode' is not a valid property expression. The expression should represent a property: C#: 't => t.MyProperty'  VB.Net: 'Function(t) t.MyProperty'.

Как я могу решить эту проблему? (желательно с использованием Ignore метода)

Ответы [ 2 ]

2 голосов
/ 02 марта 2012

Создайте подкласс UsState

public class UsStateSpecific : UsState
{
}

Затем измените тип свойства State в типе BillingAddress на UsStateSpecific.

public class Address 
{
...
public UsStateSpecific State
...
}

Теперь игнорируйте все требуемые свойства от сложного типа (или объекта) UsStateSpecific.Это не повлияет на другие ваши свойства UsState в других типах.

modelBuilder.ComplexType<UsStateSpecific>().Ignore(p => p.Id);   
modelBuilder.ComplexType<UsStateSpecific>().Ignore(p => p.Iso);
0 голосов
/ 03 ноября 2011

Попробуйте добавить это:

modelBuilder.Entity<UsState>().Ignore(p => p.Id);
modelBuilder.Entity<UsState>().Ignore(p => p.Iso);

и удалите это:

modelBuilder.Entity<Member>().Ignore(p => p.BillingAddress.State.Id);
modelBuilder.Entity<Member>().Ignore(p => p.BillingAddress.State.Iso);
...