Asp.net mvc 默认情况下,主键列不可见
我正在学习ASP.NET,并尝试使用MVC使用代码优先的方法创建两个表。下面是课程的model.cs文件Asp.net mvc 默认情况下,主键列不可见,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,model-view-controller,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,Model View Controller,我正在学习ASP.NET,并尝试使用MVC使用代码优先的方法创建两个表。下面是课程的model.cs文件 public class Instructor { [Key] public string name { get; set; } public string address { get; set; } public string address_ { get; set; } public string
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; }
}
我添加了相应的控制器,VisualStudio自动生成了预期的视图。一旦我运行了这个项目并点击了讲师菜单,下面就是打开的窗口
显然,我无法看到我声明为PK的列name。现在,当我单击“新建”时,我可以看到四列,包括主键列,即“名称”。
我的问题是,为什么我无法在主显示中看到主键列。此处工作的模板和代码生成器假定有一个技术键,即用户看不见或没有意义的键 您对
名称的选择是有争议的,这里简单的解决方案是介绍
[Key]
public int Id { get; set; }
在你所有的课上。如果您确实想保留名称,那么只需编辑生成的cshtml。主键实际上应该是一个系统内部标识符,没有任何“真实”的含义,并且它绝对不是终端用户应该看到或能够输入的内容。顺便说一句,通常对属性使用Pascal大小写,ProgId
而不是ProgId
@Tanz:SSN是一个非常糟糕的例子-首先,它不是唯一的!第二,它作为it系统中的“识别元素”被明确禁止使用(即使没有被禁止,也不确定细节)。但是如果你有一个“自然”的PK——在你的“实际”数据中可以充当PK的东西——那么是的,显然你必须向用户提供输入。然而:在我25年以上的DB经验中,这种情况已经发生了。。。。。。。非常接近永远!一个好的主键必须是(1)唯一的,(2)不可为空的,并且应该是(3)稳定的(如果可能的话,永远不会改变),如果可能的话(4)由单个窄列组成。这几乎不适用于存储的实际数据中的任何内容。用户不需要知道PK值是什么-这是一个内部系统值-没有必要用该信息“打扰”用户。我有点明白你的意思。实际上,我正在学习这些东西,所以我想创建一个我能真正看到的主键。假设我必须通过UI向我的教授展示我确实实现了主键的概念,我想向他展示,既然我声明了主键,我就不能输入重复的值。我不能用我的代码来做这件事。或者你建议的方法。因为我在猜测,即使我将ID列保留为PK;它将不可见。你的意思是说我必须手动编辑生成的“indexcs.html”?!对它只是一个简单的入门模板。