gpt4 book ai didi

c# - Remove() 不适用于多对多关系(ASP.NET、lambda 表达式)

转载 作者:行者123 更新时间:2023-11-30 18:02:19 25 4
gpt4 key购买 nike

我正在使用 C# 和 ASP.net (4.0)。我正在尝试使用 lambda 表达式删除我的 InterestsProfiles 表中的记录。该表只有两列:个人资料 ID 和兴趣 ID,它们是个人资料表 (id) 和兴趣表 (id) 的外键。

所以我设法使用以下代码添加到 Interests profiles 表(函数的参数是字符串 profileID,字符串名称(兴趣)):

var interest = 
context.a1Interests.Where(i => i.Interest.ToLower() == name.ToLower()).First();
if (interest == null)
throw new HttpResponseException(HttpStatusCode.NotFound);

// Grab the profile
a1Profile profile = context.a1Profiles.Find(_id);
// Create a new profile that will be modified
a1Profile newProfile = profile;
if (profile == null)
throw new HttpResponseException(HttpStatusCode.NotFound);

// Associate the interest with this profile
newProfile.a1Interests.Add(interest);

// Replace the old profile with the new one and save the changes
context.Entry(profile).CurrentValues.SetValues(newProfile);
context.SaveChanges();

我以为我可以使用 .Remove() 执行相反的删除操作,但它不起作用。该函数返回正确的对象,状态为 200/OK,但 InterestsProfiles 中的条目本身并未被删除。

newProfile.a1Interests.Remove(interest);

// Replace the old profile with the new one and save the changes
context.Entry(profile).CurrentValues.SetValues(newProfile);
context.SaveChanges();

表的创建脚本是这样的:

CREATE TABLE a1InterestsProfiles(
[Profile] [int] NOT NULL,
[Interest] [int] NOT NULL,
CONSTRAINT [PK_a1InterestsProfiles] PRIMARY KEY CLUSTERED
([Profile] ASC, [Interest] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]) ON [PRIMARY]
GO

-- Foreign key - Profiles
ALTER TABLE a1InterestsProfiles
ADD CONSTRAINT [FK_a1InterestsProfiles_Profiles]
FOREIGN KEY ([Profile]) REFERENCES a1Profiles([ID])
GO
ALTER TABLE a1InterestsProfiles CHECK CONSTRAINT [FK_a1InterestsProfiles_Profiles]
GO

-- Foreign key - Interests
ALTER TABLE a1InterestsProfiles
ADD CONSTRAINT [FK_a1InterestsProfiles_Interests]
FOREIGN KEY ([Interest]) REFERENCES a1Interests ([ID])
GO
ALTER TABLE a1InterestsProfiles CHECK CONSTRAINT [FK_a1InterestsProfiles_Interests]
GO

请帮忙。我认为这会非常简单。

最佳答案

编辑时需要.Attach()和实体;

添加

a1Profile profile = context.a1Profiles.Find(_id);
a1Profile.a1Interests.Add(interest);
context.SaveChanges();

删除

newProfile.a1Interests.Remove(interest);
context.a1Profiles.Attach(newProfile);
context.SaveChanges();

还值得一看 EntityState.Modified

关于c# - Remove() 不适用于多对多关系(ASP.NET、lambda 表达式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8176894/

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