我很新的MVC 3,我有守则第一种方法的问题。 我创建了2个型号,一个背景下,视图,等一切都运行完美(可以添加,删除等)
但是,当我在Microsoft SQL Management Studio中检查,我看到2个数据库。 其中之一是一个我在web.config中提出的要求。 这其中只包含成员关系表
<connectionStrings>
<add name="RecettesMaison" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=RecettesMaison;User Id=user;Password=password;"
providerName="System.Data.SqlClient"/>
第二个有一个奇怪的名字:“RecettesMaison.DB.RecettesMaisonContext”。 它包含生成的表中的一个......
我想知道这个名字是从哪里来的,我可以这样做的所有生成的表进入我的ConnectionString只有我指定的名称如何。 我只想一个数据库。 我敢肯定它的地方,只是一个标签的情况下,但我找不到对谷歌这一信息。
编辑:在nutshel,我想我的数据库使用,以保持DropCreateDatabaseIfModelChanges<RecettesMaisonContext>
但我想它来创建连接字符串,这是不是这种情况在指定的名称数据库(它使用的命名空间和创建一个名称数据库上下文的名称)
谢谢!
这是因为,你有ConnectionString中没有找到你的数据库文件,以便CodeFirst通过使用在您的DbContext是文件名完整的命名空间创建一个automaticaly。
通过改变你想要的文件名filename.mdf插入在ConnectionString这样的文字: AttachDBFilename=|DataDirectory|filename.mdf
。 该数据库文件将在您的项目\ App_Data文件夹。
你有这样的事情:
<connectionStrings>
<add name="RecettesMaison" connectionString="Data Source=.\SQLEXPRESS;Initial catalog=RecettesMaison;AttachDBFilename=|DataDirectory|filename.mdf;User Id=user;Password=password;" providerName="System.Data.SqlClient"/>
</connectionStrings>
要确保您的DbContext被传递的connectionStringName中的DbContext构造像这样使用正确的connectionString:
public class RecettesMaisonContext : DbContext
{
public RecettesMaisonContext()
: base("RecettesMaison")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
var typesToRegister =
Assembly.GetExecutingAssembly().GetTypes().Where(
type =>
type.BaseType.IsGenericType &&
type.BaseType.GetGenericTypeDefinition() == typeof(EntityTypeConfiguration<>));
foreach (object configurationInstance in typesToRegister.Select(Activator.CreateInstance))
{
modelBuilder.Configurations.Add((dynamic)configurationInstance);
}
}
...
}
默认情况下,代码首先会为你创建一个数据库。 不过,若你想覆盖此行为只是使用
Database.SetInitializer<YourDataContext>(null);
MSDN: msdn.microsoft.com/en-us/library/gg679461(v=vs.103).aspx