脚手架控制器vs2015时,表中已存在错误键
本文关键字:存在 错误 控制器 vs2015 脚手架 | 更新日期: 2023-09-27 18:27:06
我正在尝试使用VS2015遵循Professional MVC 4中的音乐商店示例。我在搭建音乐商店控制器时遇到了问题。每次我尝试创建控制器时,都会弹出一个错误窗口,其中唯一的信息是:"运行所选代码生成器时出错:‘表中已存在密钥。’"
我已经搜索了这些特定的错误,但大多数脚手架错误解决方案似乎都是关于web.config中的错误,但是我的web.config中甚至没有任何更改,它是创建新项目时创建的默认错误。
我已经尝试创建另一个MVC项目并再次对模型进行编码,但我仍然收到错误。
我使用的是Microsoft Visual Studio Enterprise 2015版本14.0.247200更新1(如果有帮助的话)。
我在Models文件夹中创建的类如下所示,与书中的内容完全相同:
public class Album
{
public virtual int AlbumId { get; set; }
public virtual int GenreId { get; set; }
public virtual int ArtistId { get; set; }
public virtual string Title { get; set; }
public virtual decimal Price { get; set; }
public virtual string AlbumArtUrl { get; set; }
public virtual Genre Genre { get; set; }
public virtual Artist Artist { get; set; }
}
public class Artist
{
public virtual int ArtistId { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
}
public class Genre
{
public virtual int GenreId { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
public virtual List<Album> Albums { get; set; }
}
感谢您的帮助
我也遇到了同样的问题。我使用的是Visual Studio Community 2015。尝试一个代码为的模型类
public class MusicStoreDB : DbContext
{
public MusicStoreDB() : base("name=MusicStoreDB")
{
}
public DbSet<Album> Albums { get; set; }
public DbSet<Artist> Artists { get; set; }
public DbSet<Genre> Genres { get; set; }
}
在添加控制器窗口中,使用MusicStoreDB作为上下文。
工作代码可以在这里找到。
第4章的代码看起来像是从数据库中生成的,所以MusicStoreDB类略有不同。
我遇到了同样的问题"表中已存在密钥"在VS 2015 Pro中,我发现如果我关闭所有打开的代码窗口,运行一次清理,然后重建,并再次尝试脚手架选项,一切都很完美!
VS 2015社区版的同一期。
只有当我在专辑课上评论了以下内容时,我才能让脚手架开始工作:
public virtual Genre Genre { get; set; }
public virtual Artist Artist { get; set; }
搭建脚手架后,您可以取消注释并修复控制器和视图。
早些时候,我的同事正在与EF合作,并强调要使其正常工作,包和包的版本非常重要。如果没有完全正确,在尝试使用EF时,可能会出现各种不相关的错误消息,如"Key hases exists in table error"消息。
由于他们正在使用它,我决定阅读wrox的书Professional ASP.NET MVC 5,在阅读第4章时,我遇到了和大家一样的错误。无论如何,我从下载了他们的样本解决方案第4章
http://www.wrox.com/WileyCDA/WroxTitle/Professional-ASP-NET-MVC-5.productCd-1118794753,descCd-DOWNLOAD.html
按照建议,我从他们的样本中复制了包文件夹,并在我的项目中替换了包文件夹。StoreManageController已创建
现在,如果这对所有人都有效,请进行反馈。它对我有效。我正在使用VS2015专业
您确定样本中的每个属性都标记为virtual
吗?我看不出Name
、Price
等作为导航属性有什么意义。
请尝试以下操作,仅将导航属性(具有关系的事物)设置为虚拟。
public class Album
{
public int AlbumId { get; set; }
public string Title { get; set; }
public decimal Price { get; set; }
public string AlbumArtUrl { get; set; }
public int GenreId { get; set; }
public virtual Genre Genre { get; set; }
public int ArtistId { get; set; }
public virtual Artist Artist { get; set; }
}
public class Artist
{
public int ArtistId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
public class Genre
{
public int GenreId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual List<Album> Albums { get; set; }
}
我遇到了同样的问题,并通过为"Data context class:"选择{ConnectionName}Entities({MyProject}.Models)副ApplicationDbContext({MyProject}.Models).
删除外键属性:
public virtual int GenreId { get; set; }
public virtual int ArtistId { get; set; }
在我的案例中,这是由于在"添加控制器"对话框中选择了不正确的数据上下文类造成的。我的项目包含2个数据上下文类,我正在为一个模型类创建一个新的控制器,该模型类已经在另一个数据上下文类中使用。在我的案例中,数据上下文类的更改解决了这个错误(Key已经存在…)。清理、重建、重新启动VS(VS 2015 Pro)都无济于事。
我的模型也面临这个问题。我刚刚在密钥中添加了[ForeignKey(")]属性以使其工作。