【问题标题】:delete data using entity framework使用实体框架删除数据
【发布时间】:2014-06-06 15:22:30
【问题描述】:

以下方法的目的是使用实体框架从数据库中删除数据。我通过传递两个参数然后调用上下文类的附加和删除方法来填充订阅实体。局实体是上下文类。

using (BUREAUEntities bureauEntities = new BUREAUEntities())
{
    var subscription = new SubcriptionRepository().GetSusbcriptionBySubscriptionTypeId(subscriptionTypeId, companyId);
    bureauEntities.Subscriptions.Attach((DataAccessLayer.DatabaseModel.Subscription)subscription);
    bureauEntities.Subscriptions.Remove(subscription);
    bureauEntities.SaveChanges();
}

我在一个实体对象不能被多个 IEntityChangeTracker 实例引用行中收到以下错误消息

bureauEntities.Subscriptions.Attach((DataAccessLayer.DatabaseModel.Subscription)subscription);

谁能告诉我哪里出错了?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 entity-framework-4 entity-framework-5


    【解决方案1】:

    通常,该错误表示您在尝试将其从另一个实例中删除时,从 BUREAUEntities 上下文的一个实例中检索到了 subscription。解决方法是在实例化上下文方面保持聪明,使用using 时很容易在这方面陷入困境,因为它会在块退出时立即处理实例。

    基本上,确保所有与上下文交互的代码都在同一个using 块中。更好的是,使用像 Ninject 或 Unity 这样的 DI(依赖注入)容器来创建一个范围为请求的上下文。这样您就不必担心最终会出现相同上下文的多个副本。

    【讨论】:

    • 在我的控制器中,我只有使用 Using 块中使用的上下文的部分。所以不确定哪个其他上下文对象正在浮动。
    • 所以我上面粘贴的代码也在 Using 块中,我正在尝试填充该实体并将其删除。所以无法理解为什么这应该是一个问题,因为我的对象还活着我正在尝试删除它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多