【发布时间】: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