次のような状況:
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="
data source=.;Initial catalog=xxxdb;
integrated security=True;
multipleactiveresultsets=True;
App=EntityFramework""
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を続行します。