Мое требование состоит в том, что мне нужно удалить некоторые строки из таблицы, а затем вставить их в одну и ту же таблицу. Я использую Единицу работы, и поэтому удаление и вставка являются частью одной транзакции. Но когда я пытаюсь сохранить данные, инфраструктура сущности - это ошибка дублирования ключевого ключа. Пожалуйста, найти ниже примера и код:удаление, а затем вставка значений с использованием структуры Entity
пример: Таблица Name- Таблица1, Столбцы - col1 (ск), col2 (СК), col3
строки к Удалить- 78,1,1
RowTo Добавить- 78,1,1 78,2,2
Моя Единица работы класс:
public class DataRepository<T> : IRepository<T> where T:class // IDisposable,
{
#region Variables
private readonly CWSEntities _context;
protected readonly IDbSet<T> _dbset;
#endregion
#region Constructors
public DataRepository()
{
_context = new CWSEntities();
_dbset = _context.Set<T>();
}
public DataRepository(CWSEntities context)
{
_context =context;
_dbset = _context.Set<T>();
}
#endregion
#region Methods
public IQueryable<T> All()
{
return _context.Set<T>();
}
// public IQueryable<T> AllInclude(params Expression<Func<T,object>>[] include)
public IQueryable<T> Include(params Expression<Func<T, object>>[] include)
{
IQueryable<T> retValue = _context.Set<T>();
foreach (var item in include)
{
retValue = retValue.Include(item);
}
return retValue;
}
public T GetById(object id)
{
return this._dbset.Find(id);
}
public IEnumerable<T> Get(Expression<Func<T, bool>> filter = null, Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null,
string includeProperties = "")
{
IQueryable<T> query = _dbset;
if (filter != null)
{
query = query.Where(filter);
}
foreach (var includeProperty in includeProperties.Split
(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProperty);
}
if (orderBy != null)
{
return orderBy(query).ToList();
}
else
{
return query.ToList();
}
}
public T Add(T entity)
{
if (entity != null)
{
return _dbset.Add(entity);
}
return null;
}
public void Delete(object id)
{
T entityToDelete = _dbset.Find(id);
Delete(id);
}
public void Delete(T entityToDelete)
{
if (entityToDelete != null)
{
if (_context.Entry(entityToDelete).State == EntityState.Detached)
{
_dbset.Attach(entityToDelete);
}
_dbset.Remove(entityToDelete);
}
}
public void Update(T entityToUpdate)
{
if (entityToUpdate != null)
{
_dbset.Attach(entityToUpdate);
_context.Entry(entityToUpdate).State = EntityState.Modified;
// _context.Entry(entity).State = System.Data.Entity.EntityState.Modified;
}
}
public virtual void Save()
{
try
{
_context.SaveChanges();
}
catch(DbEntityValidationException exception)
{
}
}
Вы экономите время на удаление и обновление? – artm
Можете ли вы разместить код, который вызывает ваш репозиторий? – user2697817