为了避免使用两个数据库,我已将我的实体映射到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的连接时,我还没有看到我的表。我做错了什么?
答案 0 :(得分:0)
我认为你会在这里遇到更多问题,一般来说这可能不是现在最好的方法。话虽这么说,为了回答你的实际问题,DbContext正在寻找一个与你的上下文同名的连接字符串。也就是说,它正在寻找名为“ASPNETDB”的连接字符串。由于您的连接字符串名为“ApplicationServices”和“MovieContext”,因此DbContext未找到其中任何一个。
要使DbContext使用特定的连接字符串,只需将该连接字符串传递给DbContext构造函数即可。例如:
public class ASPNETDB : DbContext
{
public ASPNETDB()
: base("name=ApplicationServices")
{
}
...
}
一旦你开始工作,你可能会想要使用迁移来在已经存在的数据库中创建表。