我有2個實體,用戶和材料。用戶持有材料的收集。正在更新導航屬性,但實體沒有出現在集合中
public class User
{
...
private ICollection<Material> materials;
public virtual ICollection<Material> Materials
{
get { return materials ?? (materials = new List<Material>()); }
set { materials = value; }
}
}
和材質:
public class Material
{
...
public int? UserId { get; set; }
public virtual User User { get; set; }
...
}
身份登錄時,用戶選擇材料,我爲該用戶分配到Material.User並保存更改。工作正常,更改保存在分貝。但是,如果我想使用User.Materials訪問材質,集合不包含任何元素。我已經嘗試過簡單的項目,它在那裏工作。有了我複雜的項目,事實並非如此。該怎麼辦?
請幫助我,困擾已經8個小時的問題,而且還沒有修復它。
編輯:那麼,那是......跛腳。
我的代碼實際上正在工作,但是...問題是,當查看用戶的詳細信息時,我從數據庫中檢索到用戶,並使用一個壓縮器創建了一個COPY。我錯過了一些東西:
public User(User otherUser)
{
Id = otherUser.Id;
FirstName = otherUser.FirstName;
LastName = otherUser.LastName;
Shift = otherUser.Shift;
PassCode = otherUser.PassCode;
Type = otherUser.Type;
Materials = otherUser.Materials; // this line was missing
}
添加此行後,它的工作原理。只是Visual Studio抱怨(構造函數中的虛擬成員調用)。該怎麼辦?
你已經刪除了太多的代碼。沒有關於你的問題。 – t3chb0t 2014-12-07 20:56:41
沒有其他東西可以顯示。當我選擇材料,我打電話當前登錄的用戶的方法,其中規定材料的使用者屬性,像這樣: '公共無效SetBoxAsUnused(材料材料,用戶用戶) { material.User =用戶 context.SaveChanges( ); }' – Orochi 2014-12-07 21:06:00
「構造函數中的虛擬成員調用」只是一個警告。如果在子類中覆蓋了「材質」(例如代理!),則可能會得到[意外結果](http://stackoverflow.com/a/119543/861716)。解決方案是將'otherUser.Materials'賦給'materials'(成員變量,順便說一句,你可能想根據常見的命名規則命名'_materials')。 – 2014-12-07 21:58:36