2

我想基于现有数据库生成模型——我认为它就像编写模型、添加 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.

这是因为我的模型与数据库包含的内容不完全匹配吗?

4

1 回答 1

0

这是“现有数据库的代码优先”场景。你用的是什么版本的EF?

在 EF 4.3 中,当您让代码首先为您创建数据库时,它会将 Migration-History 表插入到新数据库中。它隐藏在系统表中。这相当于您使用 EF 4.1 和 4.2 获得的 EdmMetadata 表。但是当您已经拥有数据库时,您可以使用代码优先迁移。( http://msdn.microsoft.com/en-US/data/jj591621 )

无论哪种方式,您都应该检查是否存在这样的表。如果是这样,您可以将其删除,然后您将全权负责将您的 pocos 与数据库正确匹配。

我发现的另一个快速解决方法是

    Database.SetInitializer<YourContext>(null);

到 Global.asax 中的 Application_Start()

另请参阅这个类似的问题:Entity Framework Code Only error: the model backing the context has changed since the database is created

于 2013-02-02T12:10:58.657 回答