2012-07-17 74 views
1

我有一个天蓝色的Web应用程序,运行MVC 4.它使用实体框架(版本4.3.1.0)和Code First与数据上下文一起。问题与“添加控制器”,MVC 4

我有自己的项目中的数据上下文,也有所有的模型文件。

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; } 

    } 
} 

应在所有美好和幸福。这些是我整个网络应用程序的模型。所以现在我想添加控制器,以便我可以对模型做些事情。所以我做我通常做的,

Right-click the controller folder, and press "add controller"

I name the controller "TeamController", then select the model to be "MyAwesomeNamespace.Model.Team" and the data context to "MyAwesomeNamespace.Model.AwesomeModelContext".

我现在按Add。这会导致以下消息。

"Unable to retrieve metadata for 'MyAwesomeNamespace.Model.Team'. Invalid column name 'CreatedOn'."

任何人都知道该怎么办?我无法找到任何解决方案。


一些额外的信息:

使用Azure数据库(在线)。 使用Visual Studio 2010专业版。

+0

我也试过使用实体框架5.0.0-rc。这给了我一个不同的错误:“无法检索'... Model.Team'的元数据'''FK_dbo.TeamUsers_dbo.Teams_Team_Id'不是一个限制,不能删除约束,请参阅前面的错误。 – Automatico 2012-07-17 13:24:58

回答

1

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

最好的问候,

Ming Xu。

+0

我做了两件事来解决这个问题。我重新安装了所有项目中的实体框架,并删除并重建了数据库。这工作:) – Automatico 2012-07-18 11:27:23

0

当您从EF4。*升级到EF 5.0时,首先启用迁移,看起来像是EF代码中的一件事。并且与MiniProfiler结合使用。该表存在于系统表下的dbo._MigrationHistory中。

您尝试做几件事情:

  1. 您可以在系统表文件夹CreatedOn(DATETIME)列手动添加到dbo._MigrationHistory表。
  2. 您可以通过设置停止检测更改Configuration.AutoDetectChangesEnabled = false;
  3. 评论此行MiniProfilerEF.Initialize(),禁用EF分析。