3

Entity Framework 5 を使用しており、主キーを持たないエンティティを削除しようとしています。これは、テーブルに主キーさえないことを意味します。

シナリオは次のとおりです。

次のフローを持つ3つのテーブルがあります。

MainTeam -> UserPerTeam <- ユーザー

Mainteam テーブルの主キー ID は、テーブル UserPerTeam の MainTeamID と関連しています。

私の User テーブルには、テーブル UserPerTeam の UserID に関連する主キー ID があります。

UserPerTeam には、これら 2 つの関係と、そのテーブルに必要なその他のフィールドがあります。

したがって、次のコードを使用すると、主キーがないという事実で Entity Framework が壊れます。

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

だから今、私は全能のエラーを受け取ります:

EntitySet 'UserPerTeam' を更新できません。DefiningQuery があり、現在の操作をサポートする要素が要素に存在しないためです。

どうすればこれを安全な方法で修正できるのか疑問に思っています。次のコードを使用できることはわかっていますが、Entity Framework ではないように見えるため、これを使用するのはあまり好きではありません。

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

Lazy Loading を使用していることと、UserPerTeam テーブルのエンティティのみを削除したいことをほとんど忘れていました。ソリューションで MainTeam または User オブジェクトも削除される場合は、使用できません。

すべての提案を歓迎します。

4

1 に答える 1

4

主キーのないテーブルは、ストアド プロシージャが挿入、更新、および削除操作にマップされていない限り、エンティティ フレームワークで読み取り専用です。ジャンクション テーブルの両方の列をデータベースの複合キーとしてマークします。

于 2013-03-21T08:15:40.257 に答える