簡體   English   中英

如何僅使用外鍵引用更新表?

[英]How do I update a table with only Foreign Key References?

我有一個要更新的表。 這是我的模特。

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; }
}

在Edit GET方法中,為了讓我獲得登錄用戶的正確首選項集,我得到了用戶Identity,並將其與users表中的autoId ID匹配,並將其設置為id,然后獲取包含該用戶首選項的單個記錄,如下所示:

var id = result.UserId;
var Preferences = db.Preferences.SingleOrDefault(a => a.UserId == 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);
}

您可以嘗試添加專門用於Preference的鍵,然后使外鍵只是外鍵,而不是keys

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

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

...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM