1

コード ファーストで TPC マッピングを実現したいので、次の記事を読みました: EF コード ファーストによる継承: パート 3 – 具象型ごとのテーブル (TPC)

以下のようにコードを書きました。

namespace TPCTest
{
    class Program
    {
        static void Main(string[] args)
        {
            using (TestContext context = new TestContext())
            {
                Manager m = new Manager();
                m.AnnualSalary = 100000;
                m.Name = "Allen";
                m.Sex = true;
                m.Id = 1;

                Worker w = new Worker();
                w.Id = 2;
                w.Name = "John";
                w.Sex = true;
                w.MonthlyPay = 5000;

                context.empSet.Add(m);
                context.empSet.Add(w);
                context.SaveChanges();
            }
        }
    }

    abstract class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public bool Sex { get; set; }
    }

    class Manager : Employee
    {
        public decimal AnnualSalary { get; set; }
        public string Department { get; set; }
    }

    class Worker : Employee
    {
        public decimal MonthlyPay { get; set; }
    }

    class TestContext : DbContext
    {
        public DbSet<Employee> empSet { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Manager>().Map(m =>
                {
                    m.MapInheritedProperties();
                    m.ToTable("Manager");
                });

            modelBuilder.Entity<Worker>().Map(m =>
                {
                    m.MapInheritedProperties();
                    m.ToTable("Worker");
                });

            modelBuilder.Entity<Employee>().Property(e => e.Id).HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None);
        }
    }
}

しかし、コードを実行した後、従業員テーブルもデータベースに存在することがわかりました。誰でも助けてくれますか?

前もって感謝します!

4

1 に答える 1

0

EF 5.0 以上を使用してください。

そのバージョン以降、問題は修正されたようです。EF 4.3.1 では、動作を再現できました。だから更新するだけ。

于 2014-10-04T16:24:09.277 に答える