У меня и моего друга на работе возникли трудности с определением сопоставления в Entity Framework 4 CTP 5 с использованием API Code First Fluent, и я надеялся, что кто-то может указать на очевидную глупую ошибку, которую мы совершаем.Вот соответствующая настройка базы данных:
Person
------------
int PersonId (pk)
varchar Name
Contact
--------------
int ContactId (pk)
int ContactTypeId
varchar Text
Таким образом, у человека может быть ноль или более телефонных номеров и ноль или более адресов электронной почты.Адреса телефона и электронной почты хранятся в таблице «Контакт», которая представляет собой простое отображение наследования таблиц на иерархию (с ContactTypeId в качестве распознавателя типа).В коде у нас есть:
public class Person {
public int PersonId { get; set; }
public string Name { get; set; }
public ICollection<Phone> Phones { get; set; }
public ICollection<Email> Emails { get; set; }
}
public abstract class Contact {
public int ContactId { get; set; }
public string Text { get; set; }
public Person Person
}
public class Phone : Contact {}
public class Email : Contact {}
... и для отображения базы данных у нас есть:
public class ContactMapping : IFluentEntityFrameworkMapping
{
public void OnModelCreating(ModelBuilder modelBuilder)
{
EntityTypeConfiguration<Contact> configuration = modelBuilder.Entity<Contact>();
config.HasKey(c => c.ContactId)
.Map<Email>(e => e.Requires("ContactTypeId").HasValue(1))
.Map<Phone>(p => p.Requires("ContactTypeId").HasValue(2));
}
}
public class PersonMapping : IFluentEntityFrameworkMapping
{
public void OnModelCreating(ModelBuilder modelBuilder)
{
EntityTypeConfiguration<Person> config = modelBuilder.Entity<Person>();
config.HasMany(p => p.Phones).WithRequired(p => p.Person).HasForeignKey(p => p.PersonId);
config.HasMany(p => p.Emails).WithRequired(e => e.Person).HasForeignKey(e => e.PersonId);
}
}
Когда мы пытаемся запустить простые модульные тесты для этого материала, если мыпросто попытайтесь отобрать коллекции телефонных номеров или адресов электронной почты, все хорошо.Но если мы попытаемся вытащить коллекцию людей, мы получим ошибки сопоставления.Что-то явно не так с любым из вышеприведенного кода?
Заранее благодарен за любую помощь, KurtC