脚手架控制器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; }
}

感谢您的帮助

脚手架控制器vs2015时,表中已存在错误键

我也遇到了同样的问题。我使用的是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吗?我看不出NamePrice等作为导航属性有什么意义。

请尝试以下操作,仅将导航属性(具有关系的事物)设置为虚拟。

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(")]属性以使其工作。