【问题标题】:EF7 Code First - Property cannot exist on entity type 'object' when generating migrationEF7 Code First - 生成迁移时实体类型“对象”上不能存在属性
【发布时间】:2016-03-23 03:43:36
【问题描述】:

问题

当尝试通过从命令行执行来创建我的 EF7 Code First 数据库的初始迁移时:

dnx ef migrations add Initial

我得到错误:

System.InvalidOperationException:实体类型“object”上不能存在属性“ExerciseTemplateId”,因为该属性未标记为影子状态,并且基础类型上不存在相应的 CLR 属性。 Full Stacktrace

有什么想法吗?

导致错误的模型

由于某种原因,EF7 似乎不喜欢我的模型上的主键属性 ExerciseTemplateId

public class ExerciseTemplate
{
    public int ExerciseTemplateId { get; set; }
    public string InitalCode { get; set; }
    public string ClassName { get; set; }
    public string MainMethodName { get; set; }

    public int ExerciseForeignKey { get; set; }
    public Exercise Exercise { get; set; }
}

更多详情

ExerciseTemplate 模型唯一有趣的部分是与Exercise 模型的一对一 关系:

public class Exercise
{
    public int ExerciseId { get; set; }
    public string Name { get; set; }
    public string Guidance { get; set; }
    public ExerciseTemplate Template { get; set; }
    public List<ExerciseCategory> Categories { get; set; }
    public List<Test> Tests { get; set; }
}

这个问题已经很长了,所以我的 DBContext 在这个DBContext Gist

更新

所有模型和数据库上下文都可以在这个Models and Context Gist找到

【问题讨论】:

  • 在一对(可选)关系中,依赖实体的主键列也作为外键列,因此您可能会遇到主键和外键属性的一些问题...
  • 抱歉,我不明白。您是说ExerciseTemplate 上的关键属性名称不应该存在吗?文档说你应该在可选关系中包含一个外键属性。 ef.readthedocs.org/en/latest/modeling/…
  • 好吧,这似乎不是问题所在(我在早期的 EF 版本中沿着这条路径有一些东西)。测试了您提供的模型部分(ExcerciseExerciseTemplateCodingMonkeyContext 删除了对ExcerciseCategoryTests 的引用)并且它有效。因此,错误似乎与您尚未提供问题的部分有关。请务必提供一个完整的示例来重现您的问题。
  • 顺便说一句:我是在包管理器控制台中测试的,而不是在某些外部命令行中。
  • 啊,好吧——我只是在使用外部命令行。尽管这不应该产生差异吗?我将用我所有的模型更新我的答案。感谢您的观看。

标签: c# asp.net-core-mvc entity-framework-core


【解决方案1】:

长话短说:不要在模型类中使用 objectType 作为属性类型。它在数据库中没有表示。

如果您绝对需要存储任意对象,您可以使用一些序列化程序并将序列化的对象作为 BLOB 存储在数据库中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-14
    • 2013-04-04
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多