0

Julia Lerman の EF Code First ブックの例に基づいた単純なテスト プロジェクト。Map メソッドを使用したときに TPH、TPT、または TPC が機能する例は 1 つもありませんが、なくても問題ありません。EF の他のすべての側面 (一部開発されたアプリケーションがあります) は問題なく動作しているようです。私は VS 2010/.NET 4 をすべての最新の更新プログラムと共に使用しており、今日 VS のインストールを修復することさえしました。

次の TPH の例では、InvalidOperationException - 「Map がタイプ 'Child' に対して複数回呼び出されましたが、少なくとも 1 つの呼び出しでターゲット テーブル名が指定されていませんでした。」がスローされます。

using System.Linq;
using System.Data.Entity;

namespace ConsoleApplication1
{
    public class Program
    {
        static void Main(string[] args)
        {
            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<Context>());
            var children = new Context().Set<Child>().ToList();
        }
    }

    public class Parent
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

    public class Child : Parent
    {
    }

    public class Context : DbContext
    {
        DbSet<Parent> Parents { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Parent>()
                .Map(m =>
                    {
                        m.Requires("EntityType").HasValue("Parent");
                        m.ToTable("Families");
                    })
            .Map<Child>(m => m.Requires("EntityType").HasValue("Child"));
        }
    }
}

今回の TPT の別の例では、「タイプ 'Child' は既にテーブル 'Children' にマップされています。1 つの Map 呼び出しで、テーブルのすべてのマッピング アスペクトを指定してください。」というメッセージがスローされます。

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Parent>()
                .Map(m => m.ToTable("Families"))
                .Map<Child>(m => m.ToTable("Children"));
        }

最後の例である TPC は、同様のメッセージをスローします。

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

他の例も何度も試しましたが、同様の結果が得られました。非常に基本的なものが欠けているか、インストール/構成に問題があると思われます。私のPCにはVS2008もインストールされており、数か月前に4つの異なるバージョンがインストールされていたため、SQL Serverの再構成を何度も行いました。現在、2008 R2 Express を使用しています。

誰かが似たようなものを見たことがありますか、またはEFで何が起こっているのかを追跡/デバッグする方法を知っていますか?

4

1 に答える 1

0

ここで答えを見つけました... Entity Framework 4.3 - TPH マッピングと移行エラー

...これは 4.3 および 4.3.1 の既知の問題です。(4.3.1 に修正を加えるには遅すぎることがわかりました。)

...簡単に言えば、4.1 では単一の EntityConfiguration でチェーンされたマップ呼び出しを行うことができました。そして4.2

ありがたいことに、提案された Map を呼び出す別の方法 (つまり、連鎖ではない) により、すべての問題が解決されました。

于 2012-06-05T17:47:41.040 に答える