因此,请考虑以下课程:
public class Solution
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
}
以及以下方法
public void DoSomething()
{
new Item originalItem = new Item();
item.Name = "Test";
InserIntoDb(originalItem);
Assert.True(item.Id != 0);
}
public void InserIntoDb(Item item)
{
context.Item.Add(item);
context.SaveChanges();
}
在这种情况下,插入数据库后,EF会使用其自动生成的ID值自动更新originalItem。
当我添加一些逻辑以仅在名称不存在的情况下添加到数据库时,我的问题就开始了。如果存在,则不会发生插入,因此不会填充ID属性。
我的问题是:是否有一种方法可以使context.Item(在检索全部时)自动更新originalItem值的ID,而不必更改InsertIntoDb方法以返回Item,因此不必添加一行
originalItem = InsertIntoDb(originalItem);
预先感谢
答案 0 :(得分:0)
不,没有内置的方法可以用数据库中的ID更新项目(如果存在)。
您将必须实现自定义方法才能完成此工作。如果一次只能读取少量或单个项目,则只需在输入之前尝试从数据库中获取命名的项目,然后为不存在的项目插入。
如果要对大量项目(超过5000个)执行此操作,请考虑使用存储过程在db服务器端执行此工作以提高查询性能。