我對EF 4,外鍵和INotifyPropertyChanged /部分方法公開的標量屬性面臨一些困難。實體框架4 - 關於關聯的通知
我希望你能幫我找到正確的方法來做到這一點。
圖片我有一個與國家實體有* .. 1關係的客戶實體。現在
,我顯然希望能夠做到:
var customer = new Customer();
customer.Country = [...]
...但我不一定需要CountryKey財產。
我使用.edmx設計器中的正確基數在EF中創建關聯。我選擇不在對話框中「添加外鍵屬性」。
這給我留下了一個沒有部分OnCountryChanging和OnCountryChanged的生成類。
接下來,我嘗試添加外鍵屬性,現在我有一個OnCountryKeyChanging和OnCountryKeyChanged。
但是,生成的代碼如下所示:
/// <summary>
/// No Metadata Documentation available.
/// </summary>
[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
[DataMemberAttribute()]
public global::System.Int64 CountryKey
{
get
{
return _CountryKey;
}
set
{
OnCountryKeyChanging(value);
ReportPropertyChanging("CountryKey");
_CountryKey = StructuralObject.SetValidValue(value);
ReportPropertyChanged("CountryKey");
OnCountryKeyChanged();
}
}
private global::System.Int64 _CountryKey;
partial void OnCountryKeyChanging(global::System.Int64 value);
partial void OnCountryKeyChanged();
正如你可以從代碼裏發現,該通知的PropertyChanged與「CountryKey」發生,而不是「國家」。這使WPF中的數據綁定變得困難。
我的問題是:我該如何解決這個問題?
- 我是否將我的對象包裝在ViewModel中,聽取屬性更改並去除「Key」部分?
- 我是否修改T4模板?
- 或者還有第三個選項我只是看不到?
我非常感謝這裏的任何建議,因爲我正在試驗WPF/EF而沒有在ViewModel中包裝每個Model屬性。
感謝您的回覆。我很難理解包裝每個實體的ViewModel中EF對象的好處。我試過這個的時候,我已經完成了一個ViewModel,它與模型中存在的屬性完全相同。也許我沒有正確使用MVVM。讓我細說一下:如果你要創建一個「CustomerScreen」,你會創建:OwnerViewView,OwnerWorkspaceViewModel,OwnerViewModel,OwnerEntity和OwnerRepository,或者OwnerWorkspaceViewModel和OwnerViewModel是否相同? – TroelsL 2012-04-25 10:57:26
我已接受此答案。由於性能考慮,我沒有使用DynamicObjects,而是手動編碼DataItemViewModels。我已經得出結論:需要使用DataItemViewModel來撤消管理,計算屬性,並使應用程序獨立於OR映射器(EF)。再一次,謝謝。 – TroelsL 2012-04-30 11:37:58