我是实体框架的新手,所以请耐心等待。
我在DAL中有这些实体
public class TimeSheet
{
[Key]
public int TimeSheetID { get; set; }
public DateTime SignIn { get; set; }
public DateTime SignOut { get; set; }
public virtual ICollection<TimeSheetDetail> TimeSheetDetails { get; set; }
}
public class TimeSheetDetail
{
[Key]
public int TimeSheetDetailID { get; set; }
public string Description { get; set; }
}
我在尝试更新记录时遇到以下错误(附加&#39; Model&#39;的实体失败,因为同一类型的另一个实体已经具有相同的主键值),我的更新代码如下:
public class TimeSheetService : ITimeSheetService
{
private readonly IRepository<TimeSheet> _repo;
private readonly IRepository<TimeSheetDetail> _repo2;
public void EditTimeSheet(TimeSheet obj)
{
_repo.Update(obj); //Update TimeSheet <-- error here
//loop TimeSheetDetails
foreach (var item in obj.TimeSheetDetails)
{
//Insert
if (_repo2.GetById(item.TimeSheetDetailID) == null)
{
_repo2.Insert(item);
}
//Update
else
{
_repo2.Update(item);
}
}
foreach (var item in _repo.GetById(obj.TimeSheetID).TimeSheetDetails)
{
//Delete
if (!obj.TimeSheetDetails.Any(w => w.TimeSheetDetailID == item.TimeSheetDetailID))
{
_repo2.Delete(item.TimeSheetDetailID);
}
}
}
}
我的通用存储库:
public void Insert(T obj)
{
_dbSet.Add(obj);
}
public void Update(T obj)
{
_dbSet.Attach(obj);
_dbContext.Entry(obj).State = EntityState.Modified;
}
public void Delete(T obj)
{
_dbSet.Remove(obj);
}
我环顾四周,得到的答案很复杂。所以我的问题是:
任何帮助将不胜感激。