【问题标题】:Delete record with composite primary key in MVC在 MVC 中使用复合主键删除记录
【发布时间】:2015-12-17 14:31:33
【问题描述】:

我的控制器中有一个方法,如果用户单击一个按钮,它将为他们订阅一张票,如果他们已经订阅,则将他们从订阅中删除。它通过将 TicketId 和 UserId 添加到票证订阅表来做到这一点,如果该记录已经存在,则应该将其从表中删除。我有添加订阅部分的工作,但我无法从表中删除它来工作。这是我的删除代码:

var ticketId = db.Tickets.FirstOrDefault(t => t.TicketNumber == ticketNumber).TicketId;
var userId = db.Users.FirstOrDefault(u => u.NTUserName.Equals(User.Identity.Name)).UserId;

bool subscriptionExists = db.TicketSubscriptions.Any(ts => ts.TicketId.Equals(ticketId) && ts.UserId == userId);
if (subscriptionExists)
{
     TicketSubscription ticketSubscription = db.TicketSubscriptions.Find(ticketId,userId);

     ticketSubscriptions.Delete(ticketSubscription);

}


internal DataContext context;
internal DbSet<TEntity> dbSet;

public RepositoryBase(DataContext context)
{
     this.context = context;
     this.dbSet = context.Set<TEntity>();
}
public virtual void Delete(TEntity entity)
{
     if (context.Entry(entity).State == EntityState.Detached)
         dbSet.Attach(entity);

     dbSet.Remove(entity);
}

不幸的是,我在 dbSet.Remove(entity) 行上收到此错误:

“System.InvalidOperationException”类型的异常发生在 EntityFramework.dll 但未在用户代码中处理

附加信息:实体对象不能被 IEntityChangeTracker 的多个实例。

并且没有内部异常。

【问题讨论】:

标签: c# entity-framework datacontext


【解决方案1】:

这就是我最终解决问题的方法。

1) 我添加了一个不是复合的主键

2) 我将删除的 repositorybase 方法更改为以下内容:

public virtual void Delete(object id)
{
     TEntity entity = dbSet.Find(id);

     if (context.Entry(entity).State == EntityState.Detached)
          dbSet.Attach(entity);

     dbSet.Remove(entity);
     context.SaveChanges();

}

3) 然后我将新的主键传递给这个方法

【讨论】:

    猜你喜欢
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    相关资源
    最近更新 更多