我尝试按照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网络API模板创建了另一个项目,但没有显示此错误......
更新
DB不存在。我还没有在我的机器上第一次成功执行此应用程序,以便EF代码首先为我生成数据库。它在EftDbContext构造函数本身失败。
更新2:此问题已解决。问题是我的所有POCO类和DbContext都嵌套在Program类中。 EF不喜欢它......
答案 0 :(得分:7)
来自上述评论:
您的Blog和Post类以及您的dbcontext都在您的Program类中声明。他们不应该。
EF5不支持嵌套类型。