类型未映射实体框架5.0

时间:2013-05-16 12:40:21

标签: c# entity-framework entity-framework-5

我关注a video on EF code first

我尝试按照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继承。

enter image description here

如果有兴趣的人是我当前的连接字符串(我尝试了多个选项):

  <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不喜欢它......

1 个答案:

答案 0 :(得分:7)

来自上述评论:

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

EF5不支持嵌套类型。