【问题标题】:"EntityType has no key defined", but I added [Key], why?“EntityType has no key defined”,但我添加了[Key],为什么?
【发布时间】:2015-08-27 20:23:55
【问题描述】:

我有一个这样的模型类:

public class Task
{
    [Key]
    public int TaskId;

    public string TaskDescription;
    public DateTime StartTime;
    public DateTime FinishTime;
    public  bool isActive;
}

以及数据库中的下表:

CREATE TABLE [dbo].[Tasks]
(
    [TaskId] INT NOT NULL PRIMARY KEY IDENTITY, 
    [TaskDescription] NVARCHAR(max) NOT NULL,
    [StartTime] DATE NOT NULL,
    [FinishTime] DATE NOT NULL,
    [isActive] BIT  NOT NULL DEFAULT 1   
)

编译后出现这个错误:

EntityFramework.dll 中出现“System.Data.Entity.ModelConfiguration.ModelValidationException”类型的异常,但未在用户代码中处理

补充资料:

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

Planner.Domain.Concrete.Task: : EntityType 'Task' 没有定义键。定义此 EntityType 的键。任务:EntityType:EntitySet 'Tasks' 基于没有定义键的类型 'Task'。

如何解决这个问题?

【问题讨论】:

  • 我想知道是否可以在不更改模型的 DATETIME 字段的情况下将列 DATE 更改为“time(7)”列类型。如果不可能,那么 time(7) 对应的 c# 类型是什么?

标签: c# entity-framework


【解决方案1】:

请添加获取和设置访问器。像这样。

    [Key]
    public int TaskId {get; set;}
    public string TaskDescription {get; set;}
    public DateTime StartTime {get; set;}
    public DateTime FinishTime {get; set;}
    public  bool isActive {get; set;}

【讨论】:

  • 别忘了[Key] 代表TaskId
  • @Rob:根据约定,名为Id(tablename)Id 的列将自动用作键。由于表/实体是Task,所以TaskId会自动作为key
  • @Rob 由于实体框架约定,[Key] 应由此处的上下文正确推断。
  • @marc_s Claies 从来不知道!太酷了,谢谢你告诉我:)
  • 你知道什么是适合“time(7)”数据库类型的模型数据类型吗?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-06
  • 2013-05-03
  • 2017-08-24
  • 1970-01-01
  • 2020-03-31
  • 1970-01-01
  • 2010-09-30
相关资源
最近更新 更多