私と職場の友人は、Entity Framework 4のCTP 5でコードファーストフルエントAPIを使用してマッピングを定義するのが難しく、誰かが明らかに間違っている間違いを指摘できると思っていました。関連するデータベースの設定は次のとおりです。Entity Framework 4マッピングの問題
Person
------------
int PersonId (pk)
varchar Name
Contact
--------------
int ContactId (pk)
int ContactTypeId
varchar Text
したがって、人は0個以上の電話番号と0個以上の電子メールアドレスを持つことができます。電話番号と電子メールアドレスは、「連絡先」テーブルに格納されます。これは、単純な階層ごとの継承マッピング(タイプ識別子として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);
}
}
我々は単に引っ張るしようとした場合、このようなものに対して、単純なユニットテストを実行してみてください電話番号や電子メールアドレスのコレクションはすべてうまくいきます。しかし、Personのコレクションを取得しようとすると、マッピングエラーが発生します。上記のコードに間違いがありますか?どのような援助のため、事前に
おかげで、 KurtC