0

ユーザーにロールを追加して保存するには:

var user = DataContext.Users
    .Include("Roles")
    .Where(u => u.UserName.ToUpper() == username.ToUpper())
    .FirstOrDefault();
foreach (string rolename in roleNames)
{
    var role = FindRoleByName(rolename);
    user.Roles.Add(role);
    DataContext.Entry(user).State = EntityState.Modified; // probably not needed
    DataContext.SaveChanges();
}

しかし、それは例外をスローします

[System.Data.Entity.Infrastructure.DbUpdateException]   
{"Unable to update the EntitySet 'UserRoles' because it has a DefiningQuery and no <InsertFunction> element exists in the <ModificationFunctionMapping> element to support the current operation."} System.Data.Entity.Infrastructure.DbUpdateException

このアップデートを書く正しい方法は何ですか?

- - - アップデート - - - -

<DefiningQuery>edmx モデルのセクションを削除する.include("Roles")と、LINQ ステートメントの一部で熱心な読み込みが失敗します。

また、edmx (xml エディター) でいくつかのエラー コメントを見つけました。そこが問題だと思います。それは言います:

<!--Errors Found During Generation:
warning 6002: The table/view 'DNR.dbo.UserRoles' does not have a primary key defined. The key has been inferred and the definition was created as a read-only table/view.
-->

では、結合テーブルに主キーを追加する必要がUserId_FKありRoleId_FKますか?

4

1 に答える 1

2

これはマッピングの問題のようです。たとえば、エンティティがデータベース ビューからマップされている場合や、主キーが見つからない場合に発生します。

MSDN フォーラムでいくつかの解決策を見つけることができます: Unable to update the EntitySet

于 2012-08-07T14:09:30.113 に答える