EF7 Code First - 生成迁移时 属性 不能存在于实体类型 'object' 上
EF7 Code First - Property cannot exist on entity type 'object' when generating migration
问题
当尝试通过从命令行执行来创建我的 EF7 Code First 数据库的初始迁移时:
dnx ef migrations add Initial
我收到错误:
System.InvalidOperationException: 属性 'ExerciseTemplateId' 不能存在于实体类型 'object' 上,因为 属性 没有被标记为影子状态并且没有相应的 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
长话短说:不要使用 object
或 Type
作为 属性 输入您的模型 类。它在数据库中没有表示。
如果您绝对需要存储任意对象,您可以使用一些序列化程序并将序列化的对象作为 BLOB 存储在数据库中。
问题
当尝试通过从命令行执行来创建我的 EF7 Code First 数据库的初始迁移时:
dnx ef migrations add Initial
我收到错误:
System.InvalidOperationException: 属性 'ExerciseTemplateId' 不能存在于实体类型 'object' 上,因为 属性 没有被标记为影子状态并且没有相应的 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
长话短说:不要使用 object
或 Type
作为 属性 输入您的模型 类。它在数据库中没有表示。
如果您绝对需要存储任意对象,您可以使用一些序列化程序并将序列化的对象作为 BLOB 存储在数据库中。