私は更新しようとしているテーブルがあります。ここに私のモデルです。編集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);
}
キー列を更新することはできません。行を削除して新しい行を作成します。または、これらの列をこのテーブルの主キーにしないでください。これらのオブジェクトの1つを更新する必要がある場合は、キーではいけないという良い兆候です。 – Amy
@Amy、あなたの提案を解決策にしてください。 – Skullomania