3

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パッケージを再インストールすることで、問題が修正されました。

4

1 に答える 1