实体框架无键删除

who*_*res 3 .net linq entity-framework

我正在使用实体框架 5,并且尝试删除没有主键的实体。我的意思是我的表甚至没有主键。

场景如下:

我有 3 个表,其流程如下:

MainTeam -> UserPerTeam <- 用户

我的 Mainteam 表的主键 ID 与表 UserPerTeam 中的 MainTeamID 相关。

我的用户表的主键 ID 与表 UserPerTeam 中的 UserID 相关。

UserPerTeam 有这 2 个关系以及该表中需要的一些其他字段。

因此,现在当我使用以下代码时,我的实体框架会打破它没有主键的事实:

var upt = new FighterPerTeam { UserID = userId, TeamID = teamId };
Entities.UserPerTeam.Attach(upt);
Entities.UserPerTeam.Remove(upt);
Entities.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

所以现在我得到了一个巨大的错误:

无法更新 EntitySet“UserPerTeam”,因为它具有 DefiningQuery,并且元素中不存在支持当前操作的元素。

我只是想知道如何以安全的方式解决这个问题。我知道我可以使用以下代码,但我不太喜欢使用它,因为它看起来不是实体框架。

        var cmd = ("Delete from UserPerTeam where userID = " + userId + " and teamId = " + teamId);
        Entities.Database.ExecuteSqlCommand(cmd);
Run Code Online (Sandbox Code Playgroud)

差点忘了提及我正在使用延迟加载,并且我只想删除 UserPerTeam 表中的实体。如果您的解决方案还删除了 MainTeam 或 User 对象,那么我将无法使用它。

我欢迎所有建议。

Lad*_*nka 5

没有主键的表在实体框架中是只读的,除非存储过程映射到它们的插入、更新和删除操作。将连接表中的两列标记为数据库中的复合键。