【问题标题】:primary key column not visible by default主键列默认不可见
【发布时间】:2015-03-14 13:51:29
【问题描述】:

我正在学习 ASP.NET,并尝试使用 MVC 的代码优先方法创建两个表。下面是 Courses 的模型 .cs 文件。

 public class Instructor
    {
        [Key]
        public string name { get; set; }
        public string address { get; set; }
        public string address_ { get; set; }
        public string email { get; set; }
    }
    public class Course
    {
        [Key]
        [DisplayName("Course")]
        [Required(ErrorMessage = "CSExxx")]
        public string progId { get; set; }
        public string subject { get; set; }
        public string semester { get; set; }
        public string description { get; set; }
        [ForeignKey("instructor")]
        public virtual string name { get; set; }
        public virtual Instructor instructor { get; set; }
    }

我添加了相应的控制器,并且正如预期的那样,视觉工作室会自动生成视图。一旦我运行项目并单击下面的讲师菜单,就会打开窗口。

显然,我看不到我声明为 PK 的列 name。现在,当我点击 Create New 时,我可以看到四列,其中包括 name 的主键列。

我的问题为什么我无法在主显示中看到主键列。

【问题讨论】:

  • 主键应该是真正的system-internal标识符,没有任何“真正”意义,而且绝对不是最终用户应该看到或能够输入的东西。跨度>
  • 附带说明,习惯上使用 Pascal 大小写的属性,ProgId 而不是 progId
  • @Tanz:SSN 是一个非常糟糕的例子——首先,它是 不是 独一无二!其次,明确不鼓励在 IT 系统中将其用作“识别元素”(即使没有被禁止,也不确定细节)。但是如果你有一个“自然”的PK——在你的“实际”数据中可以充当PK的东西——那么是的,显然你必须向用户提供输入。 但是:在我 25 多年的 DB 经验中,这已经发生了......非常接近从来没有!
  • 一个 good 主键必须是 (1) 唯一且 (2) 不可为空的,并且它应该(3) 是稳定的(如果可能的话,永远不要改变),并且如果可能的话 (4) 由单个窄列组成。这几乎没有适用于您存储的实际数据中的任何内容。
  • 用户不需要知道 PK 值是什么——它是一个内部系统值——用这些信息“打扰”用户没有意义......

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 model-view-controller


【解决方案1】:

这里工作的模板和代码生成器假定了一个技术密钥,即对用户不可见或无意义的密钥。

你对name的选择值得商榷,这里的简单解决方案是介绍

[Key]
public int Id { get; set; }

在你的所有课程中。如果您确实想保留名称,则只需编辑生成的 cshtml。

【讨论】:

  • 哎呀。我有点明白你的意思。实际上我正在学习这些东西,所以我想创建一个我可以真正看到的主键。假设我必须通过 UI 向我的教授展示我确实实现了一个主键概念,并且我想向他展示,因为我声明了主键,所以我不能输入重复的值。我不能用我的代码来做到这一点。或者你建议的方法。因为我猜测即使我将 ID 列保留为 PK;它将不可见。
  • 你的意思是说我必须手动编辑生成的“indexcs.html”?!
  • 是的。无论如何,这只是一个简单的入门模板。
猜你喜欢
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-11
  • 2011-03-18
  • 2012-06-25
  • 1970-01-01
相关资源
最近更新 更多