MVC4.0とEF4.3.1を搭載した新しいVisualStudio11ベータ版を試しています。
コントローラを追加すると、「「MyService.Entities.Email」のメタデータを取得できません。「System.Data.Entity.Internal.AppConfig」のタイプ初期化子が例外をスローしました」というメッセージが表示されます。
再現
エンティティプロジェクト(MyService.Entities)とMVCプロジェクト(MyService.Website)を持つ基本的なソリューションがあります。
エンティティプロジェクトでは、最初に「Email」用のクラスとDbContext用のクラスを持つコードの骨組みがあります。2つのクラスは次のようになります 。EntitiesDb
namespace MyService.Entities
{
public class EntitiesDb : DbContext
{
public EntitiesDb(string nameOrConnectionString)
: base(nameOrConnectionString)
{ }
public EntitiesDb()
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Sets up the defaults for the model builder
// Removes the metadata being written to the database, This is being depreciated anyhow
modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
// Sets the table names so that they are named as a none plural name
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
// Creates the database from scratch when it builds
base.OnModelCreating(modelBuilder);
}
public DbSet<Email> Emails { get; set; }
}
}
Eメール
namespace MyService.Entities
{
public class Email
{
public Email()
{
}
[Key, DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.Identity)]
public int EmailId { get; set; }
public string Subject { get; set; }
public string BodyHTML { get; set; }
}
}
MyService.Website MVCプロジェクトでMyService.Entitiesプロジェクトを参照し、データベース名に合うように接続文字列を設定しました
<add name="EntitiesDb" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=EntitiesDb;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
次の手順でMVCスキャフォールディングを作成する場合:
- Controllersフォルダーを右クリック>追加> Controller
- コントローラ名をEmailControllerに設定します
- Entity Frameworkを使用して、読み取り/書き込みアクションとビューを使用してテンプレートをコントローラーに設定します
- ModelクラスをEmail(MyService.Entities)に設定します
- データコンテキストクラスをEntitiesDb(MyService.Entities)に設定します
- ビューをRazorとして設定
のメッセージが表示されます
「「MyService.Entities.Email」のメタデータを取得できません。「System.Data.Entity.Internal.AppConfig」の型初期化子が例外をスローしました。」
紛らわしいのは、最初は機能してから、データベースにエンティティとプロパティを追加し始めたのですが、それでは許可されませんでした。私は今すぐに縮小しました、そしてそれはまだそれをしています。
フォーラムを見た後、私はいくつかのことを試しました:
- MVCプロジェクトで接続文字列が正しいことを確認する
- エンティティプロジェクトの接続文字列
- 更新によって影響を受けた場合に備えて、VisualStudio11ベータ版を再インストールしました
- 参照が一致することを確認します(どちらもEntityFrameworkバージョン4.3.1.0です)
- 再構築するためにデータベースを削除します(現在、データベースはありません; o))
これはVS11のバグですか?どこかにメタデータへの参照がありませんか?
どんな助けでも大歓迎です。
編集:EntitiesFrameworkをアンインストールし、NuGetパッケージを再インストールすることで、問題が修正されました。