2

最初に EF コードのビデオをフォローしていました。

VS 2012 コンソール アプリの正確な手順に従おうとしました。以下のコードを参照してください。

class Program
{
    static void Main(string[] args)
    {
        using (var context = new EftDbContext())
        {
            context.Blogs.Add(new Blog { Name = "ASP.NET" });
            context.SaveChanges();

            var blogs = from n in context.Blogs
                        orderby n.Name
                        select n;

            foreach (var b in blogs)
            {
                Console.WriteLine(b);
            }
        }
    }

    public class Blog
    {
        public int BlogId { get; set; }
        public string Name { get; set; }

        public virtual List<Post> Posts { get; set; }
    }

    public class Post
    {
        public int PostId { get; set; }
        public string Title { get; set; }

        public int BlogId { get; set; }
        public virtual Blog Blog { get; set; }
    }

    public class EftDbContext : DbContext
    {
        public EftDbContext()
            : base("name=EftDbContext")
        {

        }
        public DbSet<Post> Posts { get; set; }
        public DbSet<Blog> Blogs { get; set; }
    }
}

ただし、アプリケーションを実行すると、次のエラーが表示されます。

タイプ 'EntityFrameworkTest.Program+Post' はマップされませんでした。Ignore メソッドまたは NotMappedAttribute データ注釈を使用して、型が明示的に除外されていないことを確認してください。型がクラスとして定義されていること、プリミティブ、ネスト、またはジェネリックではないこと、および EntityObject から継承されていないことを確認してください。

ここに画像の説明を入力

ここで興味のある人が私の現在の接続文字列である場合 (複数のオプションを試しました):

  <connectionStrings>
    <add name="EftDbContext"
     connectionString="Database=TestDB;Server=(local);Integrated Security=SSPI" providerName="System.Data.SqlClient" />
  </connectionStrings>

マッピングを指定する必要がある場所と、さらに重要な理由は? EFはそれを拾うべきですか?

VS 2012 Web API テンプレートを使用して別のプロジェクトを作成しましたが、このエラーは表示されませんでした...


アップデート:

DB が存在しません。EF コードが最初にデータベースを生成するように、まだこのアプリケーションを自分のマシンで初めて正常に実行していません。EftDbContext コンストラクター自体で失敗しています。


更新 2: この問題は解決されました。問題はすべての POCO クラスであり、DbContext は Program クラスにネストされていました。EFはどういうわけかそれが好きではありません...

4

1 に答える 1