实体框架 Code First SQL Server 视图

Posted

技术标签:

【中文标题】实体框架 Code First SQL Server 视图【英文标题】:Entity framework Code First SQL Server View 【发布时间】:2017-01-23 08:28:48 【问题描述】:

我在我的数据库中定义了一个视图,然后我在代码中编写了实体定义:

    [Persistence]
    [Table("ADMV_APPLICATION_OPTION")]
    public partial class ADMV_APPLICATION_OPTION
    
        public string ID_APPLICATION_OPTION  get; set; 
        public string DS_APPLICATION_OPTION  get; set; 
        public byte FL_TYPE  get; set; 
        public Nullable<double> OPTION_NUM_VALUE  get; set; 
        public string OPTION_STR_VALUE  get; set; 
        public string OPTION_XML_VALUE  get; set; 
        public System.Guid GUID_DIVISION_SAP  get; set; 
        public string ID_DIVISION_SAP  get; set; 
        public string ID_PLANT  get; set; 
    

当我执行我的应用程序时出现错误

在模型生成过程中检测到一个或多个验证错误:

MES.Core.ADMV_APPLICATION_OPTION: : EntityType 'ADMV_APPLICATION_OPTION' 没有定义键。为此定义密钥 实体类型。

视图是否也需要密钥?

谢谢

【问题讨论】:

您需要添加 PrimaryKey ,Entity Framework 需要知道密钥。 也是为了观点? 是的视图也需要PK 【参考方案1】:

您的错误清楚地表明您需要添加 PrimaryKey。 EntityFramework 中的视图也需要PK。你可以告诉EF,在SQL中创建视图时,某些列可能被用作PK,使用ISNULL

Create view SomeView
As
  Select 
      IsNull(YourUniqueId, -1) as YourUniqueId,
      ...
  From TableName

或者使用Data Annotation使用[Key]属性,将此属性设置为ID_APPLICATION_OPTION确保它是唯一的。

    [Persistence]
    [Table("ADMV_APPLICATION_OPTION")]
    public partial class ADMV_APPLICATION_OPTION
    
        [Key]
        public string ID_APPLICATION_OPTION  get; set; 
        public string DS_APPLICATION_OPTION  get; set; 
        public byte FL_TYPE  get; set; 
        public Nullable<double> OPTION_NUM_VALUE  get; set; 
        public string OPTION_STR_VALUE  get; set; 
        public string OPTION_XML_VALUE  get; set; 
        public System.Guid GUID_DIVISION_SAP  get; set; 
        public string ID_DIVISION_SAP  get; set; 
        public string ID_PLANT  get; set; 
    

【讨论】:

以上是关于实体框架 Code First SQL Server 视图的主要内容,如果未能解决你的问题,请参考以下文章

实体框架-EF Code First Select外键

使用自定义 ID 插入数据的 Code-First 实体框架

Code First 迁移

Entity Framework学习-实体框架中的code-first迁移

Code First 迁移

“Code First Migrations ”工具