【发布时间】:2019-05-14 16:10:54
【问题描述】:
我想知道为什么 EF 还要尝试添加外国模型。 示例:
public class Category
{
public int Id { get; set; }
public string Name{ get; set; }
}
public class Content
{
public int Id { get; set; }
public string Name{ get; set; }
public Category Category{ get; set; }
}
使用迁移创建“内容”后,我有一个包含类别 ID 的表。那就是创造。所以我有三列:Id、name 和 categoryId。似乎 EF“知道”这应该只是 Category 的主键,需要存储。
比我尝试用 EF 添加一些东西。
var cat = new Category {Id = 2, Name = "awesomeCat"})
var addContent = new Content({Name = "test", Category = cat})
现在我想使用 _context.Add(addContent) 添加内容。我期待使用名称“test”和 categoryId 2 的单个插入到 db。ID 将由 DB 生成。
但 EF 也尝试将新类别添加到类别表中。
所以我进行了更深入的研究,似乎 EF“不”知道它已经存在并且没有维护任何关于类别模型的交易。 我又试了一次,没有使用新的类别,而是在之前加载它: var cat = _context.findById("2"); 并分配了这个。现在 EF 应该知道这个已经存在并且不必将其添加到类别表中。
有没有可能,我的模型是错误的。 我是否需要更多地使用它:
public class Content
{
public int Id { get; set; }
public string Name{ get; set; }
public int? CategoryId{ get; set; }
[ForeignKey("CategoryId")]
public Category Category{ get; set; }
}
那我不会得到两个类别引用吗?
【问题讨论】:
-
当您尝试加载现有类别 (
var cat = _context.findById("2");) 时是否按预期工作,还是仍插入重复行?您的问题并不清楚,因为您说“EF 应该知道”,但这可能意味着“应该并且应该”或“应该但不应该”。 -
对不起,你是对的。不,EF 仍然尝试添加类别,当然,它失败了,因为 ID 是 DB 生成的,并且不允许分配除 0(或 null)以外的值
标签: asp.net-core entity-framework-core