我首先关注的是关于 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不知何故不喜欢它……