2017-11-20 15 views
0

私は更新しようとしているテーブルがあります。ここに私のモデルです。編集GET方法で外部キー参照のみでテーブルを更新するにはどうすればよいですか?

public class Preference 
{ 
    [Key, ForeignKey("Profile"), Column(Order = 0)] 
    public int UserId { get; set; } 
    public virtual Profile Profile { get; set; } 

    [Key, ForeignKey("PrefAvatar"), Column(Order = 1)] 
    public int AvatarId { get; set; } 
    public virtual PrefAvatar PrefAvatar { get; set; } 

    [Key, ForeignKey("PrefSidebar"), Column(Order = 2)] 
    public int SidebarId { get; set; } 
    public virtual PrefSidebar PrefSidebar { get; set; } 
} 

、ログイン私は、ユーザーの環境の右のセットを取得するために、私は、ユーザーのアイデンティティを取得していますし、ユーザーテーブルとセットでAUTOID IDにそれを一致させます

var id = result.UserId; 
var Preferences = db.Preferences.SingleOrDefault(a => a.UserId == id); 

これは、ユーザーが自分の現在の設定を確認することができます:それはIDに、そのようにように、そのユーザの嗜好を含む単一のレコードを取得。私の悩みは、私が救おうとするときに来る。 stackoverflowとここに提供されている提案をmicrosoftdocsに実装しようとしましたプロパティ 'AvatarId'はオブジェクトのキー情報の一部であり、レコードを更新しようとするとを変更することはできません。私が試してみました:

public ActionResult Edit(Preference preference) 
{ 
    var user = User.Identity.Name; 
    var userId = (from ui in db.Profiles where user == ui.someUser select ui.Id).SingleOrDefault(); 
    var result = (from r in db.Preferences where userId == r.UserId select r).SingleOrDefault(); 
    var id = result.UserId; 
    var myPreferences = db.Preferences.SingleOrDefault(am => am.UserId == id); 
    if (TryUpdateModel(myPreferences)) 
    { 
     db.SaveChanges(); 
     return View(preference); 
    } 
    return View(preference); 
} 
+3

キー列を更新することはできません。行を削除して新しい行を作成します。または、これらの列をこのテーブルの主キーにしないでください。これらのオブジェクトの1つを更新する必要がある場合は、キーではいけないという良い兆候です。 – Amy

+0

@Amy、あなたの提案を解決策にしてください。 – Skullomania

答えて

0

あなたがPreferenceのために特別にキーを追加してみてくださいすることができ、その後、単に外部キー外部キーを作成し、いないkeys

[Key] 
public int PreferenceId { get; set; } 

[ForeignKey("Profile"), Column(Order = 0)] 
public int UserId { get; set; } 
public virtual Profile Profile { get; set; } 

... 
+0

私はこれを試しました、エンティティはIdentity_Insertがオフであると言いました。私はあなたが持っている編集を試みなかった。私はこれをテストし、ポストバックする – Skullomania

関連する問題