我正在使用带有linq到sql存储库的asp.net mvc,以下代码在this._table.Attach(entity)上抛出一个mvc System.Data.Linq.DuplicateKeyException异常
我的代码是这样的:
public ActionResult Edit(int id)
{
return View(_controllerRepository.GetById(id));
}
public ActionResult Edit(Directivo entity)
{
try
{
_repository.Save(entity, this.UserName)
}
catch (Exception ex)
{
return View(ex);
}
}
在存储库中:
public virtual void Save(T entity, string userName)
{
if (0 == entity.Id)
{
entity.UsuarioIntroduccion = userName;
entity.FechaIntroduccion = DateTime.Now;
entity.UsuarioModificacion = null;
entity.FechaModificacion = null;
this._table.InsertOnSubmit(entity);
}
else
{
entity.UsuarioModificacion = userName;
entity.FechaModificacion = DateTime.Now;
this._table.Attach(entity);
this._table.Context.Refresh(RefreshMode.KeepCurrentValues, entity);
}
try
{
this._dataContext.SubmitChanges();
}
catch (SqlException ex)
{
throw new DataContextException(ex);
}
}
请注意,Id不是0.
它真的很奇怪,因为它只发生在这个类中,我还有一些工作得很好。
表格是:
CREATE TABLE [Directivo](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Nombre] [varchar](45) NOT NULL,
[Apellidos] [varchar](60) NOT NULL,
[FechaNacimiento] [datetime] NULL,
[CargoDirectivoId] [int] NOT NULL,
[PathImagen] [varchar](250) NULL,
FechaIntroduccion datetime not null,
UsuarioIntroduccion varchar(45) not null,
FechaModificacion datetime,
UsuarioModificacion varchar(45),
PRIMARY KEY (Id),
FOREIGN KEY (CargoDirectivoId)
REFERENCES CargoDirectivo(Id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
)
该类由linq自动生成,部分类使其继承接口,并设置元数据的伙伴类以使用xVal
你有什么线索可以解决可能发生的事情吗?
提前致谢!
答案 0 :(得分:0)
我认为问题在于this._table.Attach(entity);
在设置新值之前移动此行,如下所示
public virtual void Save(T entity, string userName)
{
if (0 == entity.Id)
{
entity.UsuarioIntroduccion = userName;
entity.FechaIntroduccion = DateTime.Now;
entity.UsuarioModificacion = null;
entity.FechaModificacion = null;
this._table.InsertOnSubmit(entity);
}
else
{
this._table.Attach(entity);
entity.UsuarioModificacion = userName;
entity.FechaModificacion = DateTime.Now;
this._table.Context.Refresh(RefreshMode.KeepCurrentValues, entity);
}
try
{
this._dataContext.SubmitChanges();
}
catch (SqlException ex)
{
throw new DataContextException(ex);
}
}
这可能对您有所帮助http://www.richardbushnell.net/2008/02/18/how-to-update-data-with-linq-to-sql/