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 模板创建了另一个项目,但没有显示此错误...


更新:

数据库不存在。我尚未在我的机器上首次成功执行此应用程序,以便 EF 代码首先为我生成数据库。它在 EftDbContext 构造函数本身中失败。


更新2:这个问题解决了。问题是我所有的 POCO 类和 DbContext 都嵌套在 Program 类中。EF不知何故不喜欢它……

4

1 回答 1

8

从上面的评论:

您的 Blog 和 Post 类,以及您的 dbcontext 都在您的 Program 类中声明。他们不应该。

EF5 不支持嵌套类型。

于 2013-05-17T06:02:52.533 回答