【发布时间】: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 版本中沿着这条路径有一些东西)。测试了您提供的模型部分(
Excercise、ExerciseTemplate、CodingMonkeyContext删除了对ExcerciseCategory和Tests的引用)并且它有效。因此,错误似乎与您尚未提供问题的部分有关。请务必提供一个完整的示例来重现您的问题。 -
顺便说一句:我是在包管理器控制台中测试的,而不是在某些外部命令行中。
-
啊,好吧——我只是在使用外部命令行。尽管这不应该产生差异吗?我将用我所有的模型更新我的答案。感谢您的观看。
标签: c# asp.net-core-mvc entity-framework-core