Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 默认情况下,主键列不可见_Asp.net Mvc_Asp.net Mvc 3_Asp.net Mvc 4_Model View Controller - Fatal编程技术网

Asp.net mvc 默认情况下,主键列不可见

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

我正在学习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 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”?!对它只是一个简单的入门模板。