【发布时间】:2016-03-18 01:33:55
【问题描述】:
当我尝试使用唯一约束更新实体时出错 我检查了表格,有几个类似的帖子,但没有一个答案。
public class Car
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int IdCar { get;set; }
public string ColorCode { get; set; }
[Index(IsUnique = true)]
public string MotorId { get; set; }
}
private static int UpsertCar(Car checkCar, IUow uow)
{
var car =
uow.Cars.GetAll().FirstOrDefault(x => x.MotorId.Trim()
.Equals(checkCar.MotorId.Trim(),
StringComparison.CurrentCultureIgnoreCase));
if (car == null)
{
uow.Cars.Add(checkCar);
uow.Commit();
return checkCar.IdCar;
}
else
{
car.ColorCode = checkCar.ColorCode;
uow.Cars.Update(car);
uow.Commit(); // Issue when i try to save
return car.IdCar;
}
}
这里是更新函数
public virtual void Update(T entity)
{
DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
if (dbEntityEntry.State == EntityState.Detached)
{
DbSet.Attach(entity);
}
dbEntityEntry.State = EntityState.Modified;
}
错误
无法在具有唯一索引“IX_MotorId”的对象“dbo.Car”中插入重复的键行。 该语句已终止。
【问题讨论】:
-
更新时使用
car实例而不是checkCar, -
为什么你在找车的时候检查的是MotorId而不是IdCar(BTW很奇怪的命名方式)?
-
命名不是问题,这是应用程序的逻辑
标签: c# sql-server entity-framework inversion-of-control repository-pattern