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 专业版。

4

2 回答 2

1

我想知道您的数据库的 Team 表中是否有 CreatedOn 列。如果您已经有数据库,请确保您的模型类对应于数据库表。例如,将 CreatedOn 属性添加到您的模型。如果您想要代码优先的方法,您可以删除数据库。让 Entity Framework 自动生成数据库。您也可以采用数据库优先的方法。让实体框架自动从数据库中生成代码。

最好的祝福,

明旭。

于 2012-07-18T11:10:06.787 回答
0

当您从 EF4.* 升级到 EF 5.0 时,在启用迁移的情况下,这似乎是 EF 代码中的一件事。并与 MiniProfiler 结合使用。该表存在于dbo._MigrationHistory系统表下。

你尝试做一些事情:

  1. 您可以CreatedOn手动将(日期时间)列添加到dbo._MigrationHistory系统表文件夹下的表中。
  2. 您可以通过设置停止检测更改Configuration.AutoDetectChangesEnabled = false;
  3. 注释此行MiniProfilerEF.Initialize(),禁用 EF 分析。
于 2012-11-13T13:26:29.480 回答