实体框架删除没有密钥

时间:2013-03-20 21:57:50

标签: .net linq entity-framework

我正在使用Entity Framework 5,我正在尝试删除没有主键的实体。我的意思是我的桌子甚至没有主键。

方案如下:

我有3个表,其中包含以下流程:

MainTeam - > UserPerTeam< - 用户

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

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

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

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

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

所以现在我得到了全能的错误:

无法更新EntitySet'UserPerTeam',因为它有一个DefiningQuery,元素中不存在支持当前操作的元素。

我只是想知道如何解决这个问题是一种安全的方法。我知道我可以使用以下代码,但我不喜欢使用它,因为它似乎是非实体框架。

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

几乎忘了提到我正在使用Lazy Loading,我只想删除UserPerTeam表中的实体。如果您的解决方案还删除了MainTeam或User对象,那么我就无法使用它。

我欢迎所有的建议。

1 个答案:

答案 0 :(得分:3)

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

相关问题