最初に 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はどういうわけかそれが好きではありません...