ユーザーにロールを追加して保存するには:
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
ますか?