将实体映射到ASPNETDB.MDF MVC3

时间:2012-04-24 18:48:42

标签: database asp.net-mvc-3 entity-framework

为了避免使用两个数据库,我已将我的实体映射到ASPNETDB.MDF,这是自动成为成员资格的。我正在关注这篇文章,以便将我的实体映射到现有数据库:http://weblogs.asp.net/scottgu/archive/2010/08/03/using-ef-code-first-with-an-existing-database.aspx 据我所知,我需要改变的是上下文类的数据库名称,如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using UniversityApp.Models;
using System.Data.Entity.ModelConfiguration.Conventions;


namespace UniversityApp.DAL
{
        public class ASPNETDB : DbContext
        {
            public DbSet<User> Users { get; set; }
            public DbSet<Review> Reviews { get; set; }
            public DbSet<Movie> Movies { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }

    }
}

我也更改了连接字符串:

<connectionStrings>
    <add name="ApplicationServices"    connectionString="data source=.\SQLEXPRESS Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"     providerName="System.Data.SqlClient" />
<add name="MovieContext" connectionString="Data Source=|DataDirectory|aspnetdb.mdf"     providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>

一切似乎都运行正常(旧数据库的方法,数据库的读写,甚至是初始化数据)。但是当我打开与ASPNETDB.mdf的连接时,我还没有看到我的表。我做错了什么?

1 个答案:

答案 0 :(得分:0)

我认为你会在这里遇到更多问题,一般来说这可能不是现在最好的方法。话虽这么说,为了回答你的实际问题,DbContext正在寻找一个与你的上下文同名的连接字符串。也就是说,它正在寻找名为“ASPNETDB”的连接字符串。由于您的连接字符串名为“ApplicationServices”和“MovieContext”,因此DbContext未找到其中任何一个。

要使DbContext使用特定的连接字符串,只需将该连接字符串传递给DbContext构造函数即可。例如:

public class ASPNETDB : DbContext 
{
    public ASPNETDB()
     : base("name=ApplicationServices")
    {
    }
    ...
}

一旦你开始工作,你可能会想要使用迁移来在已经存在的数据库中创建表。