4

私はMVC3を初めて使用し、コードファーストのアプローチに問題があります。2つのモデル、コンテキスト、ビューなどを作成しましたが、すべてが完璧に機能します(追加、削除などが可能)

しかし、Microsoft SQL Management Studioをチェックインすると、2つのデータベースが表示されます。それらの1つは、web.configで要求したものです。これにはメンバーシップテーブルのみが含まれています

<connectionStrings>
<add name="RecettesMaison" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=RecettesMaison;User Id=user;Password=password;"
     providerName="System.Data.SqlClient"/>

2番目の名前は「RecettesMaison.DB.RecettesMaisonContext」という奇妙な名前です。生成されたテーブルを含むものです...

この名前の由来とその方法を知りたいのですが、生成されたすべてのテーブルが、指定した名前でのみ接続文字列に入れられます。1つのデータベースが必要です。コンテキストのどこかにあるタグは1つだけだと思いますが、この情報はgoogleで見つかりません。

編集:一言で言えば、データベースを使い続けDropCreateDatabaseIfModelChanges<RecettesMaisonContext>たいのですが、接続文字列で指定された名前でデータベースを作成したいのですが、そうではありません(名前空間とデータベースの名前を使用して名前を作成します)コンテクスト)

ありがとう!

4

2 に答える 2

1

デフォルトでは、コードが最初にDBを作成します。ただし、この動作をオーバーライドしたい場合は、

Database.SetInitializer<YourDataContext>(null);

MSDN:msdn.microsoft.com/en-us/library/gg679461 (v=vs.103).aspx

于 2012-08-28T12:21:16.227 に答える
1

これは、データベースのファイルが見つからなかったため、CodeFirstは、ファイル名のDbContextがある場所の完全な名前空間を使用して自動的にファイルを作成するためです。

filename.mdfを必要なファイル名に変更して、このテキストをconnectionStringに挿入しますAttachDBFilename=|DataDirectory|filename.mdf。データベースファイルはproject\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);
        }
    }

    ...
}
于 2012-08-28T11:44:01.097 に答える