我想基于现有数据库生成模型 - 我认为它就像编写模型,添加DbContext类和配置连接字符串一样简单:
namespace MyProject.Models
{
public class Account
{
public int Id { get; set; }
public string Email { get; set; }
public string Name { get; set; }
}
public class AccountDBContext : DbContext
{
public DbSet<Account> Accounts { get; set; }
}
}
使用简单的样板控制器
public ActionResult Index()
{
return View(db.Accounts.ToList());
}
样板视图,我不会在这里发布,它列出了我们返回的db对象的所有成员。
最后,连接字符串:
<add name="AccountDBContext" providerName="System.Data.SqlClient" connectionString="[server connection string]" />
唯一的问题是我没有看到任何条目被显示。它肯定是连接,但不检索或显示特定数据库包含的数据..我错过了什么?
修改
好的,首先是第一件事:它没有连接。我的连接字符串名称中有拼写错误。它达到默认值,随后不显示任何内容。
我现在得到的是The model backing the 'AccountDBContext' context has changed since the database was created.
这是因为我的模型与数据库包含的内容完全不匹配吗?
答案 0 :(得分:0)
这是“具有现有数据库的代码优先”方案。 您使用的是哪个版本的EF?
在EF 4.3中,当您让代码首先为您创建数据库时,它会将Migration-History表插入到新数据库中。它隐藏在系统表中。这相当于EF 4.1&amp; S中的EdmMetadata表。 4.2。但是当您已经拥有数据库时,您可以使用代码首次迁移。 (http://msdn.microsoft.com/en-US/data/jj591621)
无论哪种方式,您都应该检查是否存在这样的表。如果确实如此,您可以删除它,然后您将全权负责将您的pocos正确匹配到数据库。
我发现的另一个快速解决方法是放
Database.SetInitializer<YourContext>(null);
到Global.asax
中的Application_Start()