4

次のような状況:

EF5.0でデータベースファーストアプローチを使用する1つの大きなMVCプロジェクトがあります。

ObjectContextコンストラクター:

namespace xxx.Models
{
    (...)
        public partial class xxxEntities : ObjectContext
        {
            #region Constructors

            /// <summary>
            /// (...)
            /// </summary>
            public xxxEntities() : base("name=xxxEntities", "xxxEntities")
            {
                this.ContextOptions.LazyLoadingEnabled = true;
                OnContextCreated();
            }

    (...)

接続文字列:

    <add name="xxxEntities" 
         connectionString="metadata=res://*/Models.xxxModel.csdl|
         res://*/Models.xxxModel.ssdl|res://*/Models.xxxModel.msl;
         provider=System.Data.SqlClient;provider connection string=&quot;
         data source=.;Initial catalog=xxxdb;
         integrated security=True;
         multipleactiveresultsets=True;
         App=EntityFramework&quot;"
         providerName="System.Data.EntityClient" />

分離された名前空間での新しい開発をテストするために、CodeFirstを選択します。

接続文字列:

<add name="xxxCFContext" 
     connectionString="Data Source=.;
     Initial Catalog=xxxdb;
     Integrated Security=True;
     User Instance=False;
     MultipleActiveResultSets=True" 
     providerName="System.Data.SqlClient" />

DbContextコンストラクター:

namespace xxx.Models.CodeFirst
{
    public partial class xxxCFContext : DbContext
    {
        static xxxCFContext()
        {
            Database.SetInitializer<xxxCFContext>(new ValidateDatabase<xxxCFContext>());
        }

        public xxxCFContext()
            : base("Name=xxxCFContext")
        {
        }

(...)

add-migrations、update-databaseを問題なく実行し、ビルドは正常に完了しました。しかし、初めてコードファーストのデータベースアクセスで:

xxxCFContext cfdb = new xxxCFContext();

foreach (Xobject xobject in cfdb.Xobjects)

エラーが表示されます:

「概念モデルタイプ'xxx.models.yyyclass'が見つかりませんでした」が、このyyyclassはコードファースト部分ではなくedmxに存在します。

EF5.0をアンインストールし、EF6.0をインストールすると、エラーは消えました。しかし、6.0alfa3プレリリースではなくEF5.0が必要です。

どうしたの?EF5.0でcodefirstと混合したedmxをどのように使用できますか?

どんなアイデアでもありがたいです。

編集

私はこの回避策を知っていますが、私には役立ちません:

Edmxファイルと混合されたコードファーストアプローチでEntityFrameworkを使用した人はいますか?

http://blog.oneunicorn.com/2012/02/26/dont-use-code-first-by-mistake/

概念モデルタイプが見つかりませんでした

http://blog.oneunicorn.com/2012/02/26/dont-use-code-first-by-mistake/

Entity Framework(4.3)は、複数形ではなく単数形の名前を探します(エンティティ名が「s」で終わる場合)

DatabaseFirstとEntityFramework4.1を使用したMVC3アプリの構築

(xxxmodel.Context.ttおよびxxxModel.ttを使用して)大きな既存のedmxを生成する問題は、ObjectContextの利点を大いに活用するため、ObjectContextからDbContext(既存のedmxの背後)に単純に変更することはできません。

編集II

DB FirstからCodeFirstまで、以下を選択します。

  • 古いedmxファイルからコード生成に移動しました。EF 5.xを使用して、 DbContext Fluent Generatorがモデルオブジェクトを生成したため、モデルオブジェクトが作成されました。

(EDMXエディターを右クリックして、コード生成項目を追加します。インストールされていない場合は、[ツール]メニュー、[拡張機能と更新]、EF 5.x DbContext Fluent Generatorここに画像の説明を入力してください

  • モデルオブジェクトとコンテキストはEDMXからコピーされます。
  • EDMXは彼の下にあったものをすべて削除しました。
  • ConnectionStringを、難しいEDMXスタイルから単純なコードファースト形式に設定します。
  • タダム、約10分で、データベースファーストからコードファーストに移行しました。開発中、データベースに既存の80個のテーブルがあります。

  • Power Management ConsoleでEnable-Migrationsを実行し、CodeFirstを続行します。

4

1 に答える 1

2

EF のさまざまな「タイプ」(コード優先、データベース優先など) を別々のアセンブリに保持すると役立つ場合があります。EF の制限は、特定のデータベース優先属性を持つアセンブリでコード優先を使用できないことです。 - ただし、EF の新しいバージョンでこれが修正される可能性があります (おそらく、EF6 アルファ版が機能するのはそのためです)。

于 2013-03-07T10:03:16.473 に答える