建模现有数据库

时间:2013-02-01 23:39:29

标签: asp.net-mvc model-view-controller asp.net-mvc-4

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

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

1 个答案:

答案 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()

另请参阅此类似问题:Entity Framework Code Only error: the model backing the context has changed since the database was created