gpt4 book ai didi

entity-framework - 如何在不加载所有数据的情况下删除 Entity Framework 中的多对多关系

转载 作者:行者123 更新时间:2023-12-03 12:36:26 25 4
gpt4 key购买 nike

有谁知道如何在 ADO.NET Entity Framework 中删除多对多关系而无需加载所有数据?就我而言,我有一个实体 话题 具有属性 订阅 我需要删除一个订阅。代码 myTopic.Subscriptions.Remove(...) 有效,但我需要先加载所有订阅(例如 myTopic.Subscriptions.Load() ),我不想这样做,因为有很多(我的意思是很多)订阅。

最佳答案

您可以 Attach() 订阅,然后 Remove() 它 - 请注意,我们在这里没有使用 Add(),只是 Attach,因此我们有效地告诉 EF 我们知道该对象已附加在商店中,并要求它表现得好像那是真的。

var db = new TopicDBEntities();
var topic = db.Topics.FirstOrDefault(x => x.TopicId == 1);

// Get the subscription you want to delete
var subscription = db.Subscriptions.FirstOrDefault(x => x.SubscriptionId == 2);
topic.Subscriptions.Attach(subscription); // Attach it (the ObjectContext now 'thinks' it belongs to the topic)
topic.Subscriptions.Remove(subscription); // Remove it
db.SaveChanges(); // Flush changes

整个交换,包括从数据库中获取原始主题,将这 3 个查询发送到数据库:
SELECT TOP (1) 
[Extent1].[TopicId] AS [TopicId],
[Extent1].[Description] AS [Description]
FROM [dbo].[Topic] AS [Extent1]
WHERE 1 = [Extent1].[TopicId]


SELECT TOP (1)
[Extent1].[SubscriptionId] AS [SubscriptionId],
[Extent1].[Description] AS [Description]
FROM [dbo].[Subscription] AS [Extent1]
WHERE 2 = [Extent1].[SubscriptionId]


exec sp_executesql N'delete [dbo].[TopicSubscriptions]
where (([TopicId] = @0) and ([SubscriptionId] = @1))',N'@0 int,@1 int',@0=1,@1=2

所以它不会在任何时候取消所有订阅。

关于entity-framework - 如何在不加载所有数据的情况下删除 Entity Framework 中的多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/757067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com