2
我和我的朋友在工作中使用Code First Fluent API定义实体框架4 CTP 5中的映射时遇到了一些困难,我希望有人能够指出我们正在制作的一些明显的愚蠢错误。下面是有关数据库设置:实体框架4映射问题
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