这可能是一个重复的问题,但我找不到确切的答案或文档。
我有两张桌子,有一对多的关系。每个项目都有一个类别,CategoryID是外键。
public partial class Item
{
public long ItemID { get; set; }
public string ItemName { get; set; }
public int CategoryID { get; set; }
public virtual Category Category { get; set; }
}
public partial class Category
{
public int CategoryID { get; set; }
public string Name { get; set; }
public virtual ICollection<Item> Items { get; set; }
}
当我尝试添加项目时,看起来我总是需要确保类别为null。如果我忘了将它设置为null,EntityFrame将创建一个新类别,即使存在旧的类别。
例如: 我的数据库是:
Item
Item #1: id: 1, name TV categoryId : 1
Item #2: id: 2, name DVD categoryId : 1
Item #3: id: 3, name Cat categoryId: 2
Categories
Category #1: id: 1 name: electronics
Category #2: id: 2 name: pets.
如果我的代码是
using (var dbContext = new DBContext())
{
Category category = dbContext.Categories.FirstOrDefault(c=>c.CategoryID = 2);
Item item = new Item()
{
Name = "dog",
CategoryId = 2,
Category = category,
};
dbContext.Items.Add(item);
dbContext.SaveChanges();
}
此代码将导致另一个具有重复名称的新类别&#34; pet&#34;创建。我想这很有道理。但我想知道是否有关于如何/何时设置为集合对象(类别对象)的指南,或何时应将其设置为null?当我需要更新现有项目的类别时,我们的SOP是什么?如果我只使用以下代码:
using (var dbContext = new DBContext())
{
Item item = dbContext.Items.FirstOrDefault(i => i.ItemID == 1);
item.CategoryId = 2;
dbContext.SaveChanges();
}
此代码无效。我应该手动将item.Category属性设置为null吗?或者在EF6中有更好的形成?
答案 0 :(得分:0)
将项目类更改为此
public partial class Item
{
public long ItemID { get; set; }
public string ItemName { get; set; }
public int CategoryID { get; set; }
[ForeignKey="CategoryID"]
public virtual Category Category { get; set; }
}
然后你在类中使用[ForeignKey]注释将id连接到数据,当你创建新数据时,只需将类别Id放入数据中。
Item item = new Item()
{
Name = "dog",
CategoryID = 2,
};