【发布时间】:2017-01-21 16:08:48
【问题描述】:
db 中有两个实体,Cars 和 Car's image:
public class Car
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[Required]
public string Title { get; set; }
}
和
public class CarImage
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[Required]
public int CarID { get; set; }
[ForeignKey("CarID")]
public virtual Car Car { get; set; }
public string FileName { get; set; }
public bool IsPrimaryImage { get; set; }
}
一切都很好,工作正常。示例:car with car is = 123 有 5 张图片,其中一张已标记为“主要”(第一个上传的图片或版主手动选择)。
然后我决定优化 db 模型:删除 IsPrimaryImage 并将 PrimaryImage 添加到 Car 中,如下所示:
public class CarImage
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[Required]
public int CarID { get; set; }
[ForeignKey("CarID")]
public virtual Car Car { get; set; }
public string FileName { get; set; }
}
和
public class Car
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[Required]
public string Title { get; set; }
public int? PrimaryImageID { get; set; }
public virtual CarImage PrimaryImage { get; set; }
}
(汽车可能不包含图像 - 这就是为什么int?,而不是int)
编译,运行 -- 失败并出现错误:
“System.InvalidOperationException”类型的异常发生在 EntityFramework.dll 但未在用户代码中处理
附加信息:无法确定主端 类型“MyApp.Domain.CarImage”和 'MyApp.Domain.Car'。该关联的主体端必须是 使用关系流式 API 或数据显式配置 注释。
在stackoverlow上发现了很多关于这个错误的类似主题:
是否可以使用数据注释修复错误? EF 版本为 6。
【问题讨论】:
-
你不使用 Fluent API 吗?
-
@SoheilAlizadeh 当然,我更喜欢数据注释 - 它看起来(对我来说)更清晰。
标签: c# entity-framework