【问题标题】:Creating a controller for a model using EF (No key error)使用 EF 为模型创建控制器(无键错误)
【发布时间】:2015-08-10 09:47:08
【问题描述】:

我正在尝试基于以下模型创建一个带有脚手架的控制器(之前没有创建上下文,但我选择了与控制器一起创建它的选项):

namespace MvcMusicStorePractice.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; }
    }
}

但我不断收到以下错误:

Album::EntityType 'Album' 没有定义键。定义此 EntityType 的键。

我尝试了以下解决方案:

  • [Key] 属性添加到AlbumId;
  • 将 public virtual int AlbumId 更改为简单的 public int Id。

但它仍然不起作用。有谁知道问题出在哪里?

【问题讨论】:

    标签: c# entity-framework asp.net-mvc-4


    【解决方案1】:

    为了使用实体框架,每个实体都需要一个键。这就是 EF 跟踪其缓存中的对象、将更新发布回底层数据存储并将相关对象链接在一起的方式:

    namespace MvcMusicStorePractice.Models
    { 
        public class Album
        {   
            [Key]
            public int AlbumId { get; set; }
            public int GenreId { get; set; }
            public int ArtistId { get; set; }
            public string Title { get; set; }
            public decimal Price { get; set; }
            public string AlbumArtUrl { get; set; }
    
            public virtual Genre Genre { get; set; }
            public virtual Artist Artist { get; set; }
        }
    }
    

    注意将使该字段成为 PK 的 [key] 注释。

    还要确保只对外来对象使用“虚拟”(仅限流派和艺术家)/

    【讨论】:

    • 嘿耶勒,谢谢你的回复,但它仍然给我同样的错误信息。该示例实际上是一个实践示例,因此我不确定为什么它不起作用。我将控制器 StoreManagerController 命名为示例中的名称。我知道这不是惯例,但肯定也不会导致错误。请注意,我的 VS 确实接受 [Key] 注释,并且也不会给我一个代码内错误。
    • 我没有看到问题。我测试了这个类并创建了一个控制器。问题是,它没有给我任何错误:(...
    • 嗯,我猜 VS2015 出了点问题。我已经担心这是问题所在(因为我遇到了其他一些(对我而言)无法解释的错误)。至少我知道当时的编码是正确的,因为我还在学习,这是主要目标:) 所以仍然感谢您的时间和回答!
    • 没问题,我希望你能尽快解决 VS2015 问题,因为这可能会让人头疼:)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    相关资源
    最近更新 更多