1

MVC 4 を実行する Azure Web アプリケーションがあります。これは、エンティティ フレームワーク (バージョン 4.3.1.0) と Code First をデータ コンテキストと共に使用します。

独自のプロジェクトにデータ コンテキストがあり、すべてのモデル ファイルも含まれています。

public class AwesomeModelContext : DbContext
{

    public DbSet<User> Users { get; set; }
    public DbSet<License> Licenses { get; set; }
    public DbSet<AppSession> AppSessions { get; set; }
    public DbSet<EditSession> EditSessions { get; set; }
    public DbSet<Space> Spaces { get; set; }
    public DbSet<SpaceUserPrivilege> SpaceUserPrivileges { get; set; }
    public DbSet<File> Files { get; set; }
    public DbSet<Resource> Resources { get; set; }
    public DbSet<Team> Teams { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

        // Remove cascading deletes, having them turned on by default scares me.
        modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();

        modelBuilder.Entity<Space>()
            .HasMany<SpaceUserPrivilege>(s => s.SpaceUserPrivileges)
            .WithRequired(p => p.Space)
            .WillCascadeOnDelete(true);
        modelBuilder.Entity<User>()
            .HasMany<SpaceUserPrivilege>(u => u.SpaceUserPrivileges)
            .WithRequired(p => p.User)
            .WillCascadeOnDelete(true);
        modelBuilder.Entity<Team>()
            .HasMany<User>(u => u.Users)
            .WithRequired()
            .WillCascadeOnDelete(false);
        // Run migrations, if any.
        Database.SetInitializer<AwesomeModelContext >(new MigrateDatabaseToLatestVersion<AwesomeModelContext , Configuration>());
    }

}

関連するモデルは「チーム」で、次のようになります。

namespace MyAwesomeNamespace.Model
{
    public class Team
    {

        [Key]
        public int Id { get; set; }
        public string Name { get; set; }

        public ICollection<User> Users { get; private set; }

    }
}

それはすべてうまくいくはずです。これらは、Web アプリ全体のモデルです。そこで、コントローラーを追加して、実際にモデルで何かを実行できるようにします。だから私はいつものことをします、

コントローラーフォルダーを右クリックし、「コントローラーの追加」を押します

コントローラーに「TeamController」という名前を付け、モデルを「MyAwesomeNamespace.Model.Team」に、データ コンテキストを「MyAwesomeNamespace.Model.AwesomeModelContext」に選択します。

[追加] を押します。これにより、次のメッセージが表示されます。

「'MyAwesomeNamespace.Model.Team' のメタデータを取得できません。列名 'CreatedOn' が無効です。」

ここで何をすべきか知っている人はいますか?これに対する解決策が見つかりません。


追加情報:

Azure データベースの使用 (オンライン)。Visual Studio 2010 Pro を使用しています。

4

2 に答える 2

1

データベースのTeamテーブルにCreatedOn列があるかどうかを知りたいのですが。すでにデータベースがある場合は、モデルクラスがデータベーステーブルに対応していることを確認してください。たとえば、CreatedOnプロパティをモデルに追加します。コードファーストアプローチが必要な場合は、データベースを削除できます。EntityFrameworkにデータベースを自動的に生成させます。データベースファーストのアプローチを取ることもできます。EntityFrameworkがデータベースからコードを自動的に生成するようにします。

よろしくお願いします、

明徐。

于 2012-07-18T11:10:06.787 に答える
0

EF4.* から EF 5.0. そして、MiniProfiler との組み合わせです。dbo._MigrationHistoryテーブルは、システム テーブルの下に存在しました。

あなたはいくつかのことを試みます:

  1. システムテーブルフォルダーの下のテーブルにCreatedOn(DateTime) 列を手動で追加できます。dbo._MigrationHistory
  2. 設定することで変更の検出を停止できますConfiguration.AutoDetectChangesEnabled = false;
  3. この行にコメントを付けてMiniProfilerEF.Initialize()、EF プロファイリングを無効にします。
于 2012-11-13T13:26:29.480 に答える