0

2 つのデータベースを持つことを避けるために、メンバーシップのために自動的に作成される 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 への接続を開くと、テーブルが表示されません。私は何を間違っていますか?

4

1 に答える 1

0

ここではさらに多くの問題が発生するため、一般的にこれが現時点で最善のアプローチではない可能性があると思います。そうは言っても、実際の質問に答えるために、DbContextはコンテキストと同じ名前の接続文字列を探しています。つまり、「ASPNETDB」という名前の接続文字列を探しています。接続文字列の名前は「ApplicationServices」および「MovieContext」であるため、DbContextはこれらのいずれも検出しません。

DbContextに特定の接続文字列を使用させるには、その接続文字列をDbContextコンストラクターに渡すだけです。例えば:

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

これが機能するようになったら、移行を使用して、既存のデータベースにテーブルを作成することを検討することをお勧めします。

于 2012-04-25T03:54:40.643 に答える