我正在修改我自己的應用程序Windows Phone Database Example using MVVM。在此建議使用getter/setter組合將EntitySet
屬性包裝在模型對象上,該組合允許使用IEnumerable
(使用Assign
方法)進行分配,例如使用Assign
方法。如何在C#中使用對象初始值設定項來初始化包含在getter/setter中的EntitySet?
// Example method from a model class 'SomeModelObject'
[Association(Storage = "_todos", OtherKey = "_categoryId", ThisKey = "Id")]
public EntitySet<ToDoItem> ToDos
{
get { return this._todos; }
set { this._todos.Assign(value); }
}
然而,當我嘗試實例化一個具有EntitySet
屬性的對象也不會允許它,例如
SomeModelObject myModelObject = new SomeModelObject() {
Property1 = "foo",
Property2 = true,
// Following raises an error, even though setter should allow assignment
// from an IEnumerable (because of the use of 'Assign' in the setter)
ToDos = new List<ToDoItem>() {
new ToDoItem(),
},
};
錯誤如下,
Error 1 Cannot implicitly convert type
'System.Collections.Generic.List<SomeApp.ToDoItem>' to
'System.Data.Linq.EntitySet<SomeApp.ToDoItem>'
如何實例化從EntitySet
引用的對象?
首先,是的,你說得對,我已經調整了代碼,試圖得到最簡單的情況 - 我已經更新了這個問題。其次,我認爲你可以將一個IEnumerable分配給實體集合的原因是因爲使用'Assign'的setter,並且根據http://msdn.microsoft.com/en-us/library/bb299765.aspx,它接受IEnumerable的。 – Brendan
@Brendan:'Assign'接受'IEnumerable',但這不是屬性的類型,是嗎? 「Assign」的使用僅僅是一個實現細節。 –
好吧,這很棒,它現在使用類型化的EntitySet進行編譯,但是如果我正在創建一個新對象,那麼在什麼情況下'ToDos'屬性會被預先存在? – Brendan