有没有办法让实体框架在搭建 CRUD 页面时包含主键列?

问题描述

我有一个带有 EF 6 的 .net core 3.1 MVC 应用程序。我让它使用基于已经生成的模型的“新脚手架项”功能创建 CRUD 页面(我正在做“数据库优先”)。它生成的 cshtml 文件从不包含主键列,就像没有为它们制作文本框和标签一样。这些不是标识列。尽管对于确实具有标识列的表,如果将其包含在除 Create 之外的 CRUD 页面中会更好。

型号:

namespace ABCDashboard.Models
{
    public partial class TableMap
    {           
        public string EventOID { get; set; }           
        public string FormOID { get; set; }            
        public string ItemGroupOID { get; set; }
        public string TableSchema { get; set; }
        public string TableName { get; set; }
        public int? FormOrder { get; set; }
        public int? ItemGroupOrder { get; set; }
    }
}

用于创建、详细信息、删除、编辑和索引的 .cshtml 文件省略了 EventOID、FormOID 和 ItemGroupOID。

解决方法

解决方案是添加 DatabaseGenerated 注解:

using System.ComponentModel.DataAnnotations.Schema;

namespace ABCDashboard.Models
{
    public partial class TableMap
    {
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public string StudyEventOID { get; set; }
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public string FormOID { get; set; }
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public string ItemGroupOID { get; set; }
        public string TableSchema { get; set; }
        public string TableName { get; set; }
        public int? FormOrder { get; set; }
        public int? ItemGroupOrder { get; set; }
    }
}

这适用于我的具有非身份 PK 的表的创建、索引和编辑页面。还不确定如何让它将作为身份列的 ID 也放在页面上(除了创建),但它总是只有一列,因此手动添加更容易。