我有一个名为Item
的域名和一个名为Category
的域名。我想将类别的PK添加到Item
,但我不确定如何在EF 6中执行此操作
public class Item
{
[Key]
public Guid Id { get; set; } = GuidCombGenerator.GenerateComb();
public string Name { get; set; }
public Category Category { get; set; }
}
public class Category
{
[Key]
public Guid Id { get; set; } = GuidCombGenerator.GenerateComb();
public string Name { get; set; }
public virtual ICollection<Item> Items { get; set; } = new List<Item>();
}
我以为我能做到这一点
var item = new Item
{
CategoryId = dto.CategoryId ,
Name = dto.Name.Trim(),
};
dbContext.StorageItems.Add(item);
dbContext.SaveChanges();
我添加了另一个名为CategoryId
的属性,并使用正确的Id
填充此属性。然而,这会产生一个新的Category
条目而不是仅仅链接2。
我认为我可以做到这一点,但也许我正在将它与NHibernate混合在一起。
然后我尝试了这个(不认为这会起作用):
var item = new item
{
Category = new Category { Id = dto.CategoryId, },
Name = dto.Name.Trim(),
};
dbContext.StorageItems.Add(item);
dbContext.SaveChanges();
根本不喜欢这个。
我能想到的唯一选择是转到数据库并获取Category
对象然后将其添加到Item但我想阻止前往数据库只是为了获取我已经知道的id
答案 0 :(得分:0)
标记您的Category
虚拟广告,创建CategoryId
媒体资源,然后将其指定为Category
的外键。
public class Item
{
[Key]
public Guid Id { get; set; };
public string Name { get; set; }
public Guid CategoryId { get; set; }
[ForeignKey("CategoryId")]
public virtual Category Category { get; set; }
}
有了这个,你的第一个代码(直接分配Id
)应该有效,除非你&#34;触摸&#34; Category
属性或引用。
为此,请确保您未在上下文中禁用代理
此外,请确保您不要将Id
属性设置为自定义,让EF完成其工作