我需要爲應用程序實現後臺層。它必須通過EF4實現數據訪問,並通過WCF服務將數據訪問公開爲CRUD。 WCF數據服務的使用不是一個選項,因爲要求是公開一個TCP服務端點。用於WCF的實體框架的推薦結構WCF
我看到EF在VS 2010中附帶了EF三種代碼生成模板:
DbContext
發生器,產生非常簡單的POCO的,沒有額外的代碼實體類從DbContext
衍生的背景和;public partial class MyEntities : DbContext {...}
類和實體類
.... public int EmailAddressLocatorID { get; set; } .... public virtual Address Address { get; set; } .... public virtual ICollection<HouseholdGuest> HouseholdGuests { get; set; }
EntityObject
發電機自我跟蹤實體發生器,產生從
ObjectContext
和實體獲得的上下文POCO類實現IObjectWithChangeTracker
和INotifyPropertyChanged,
和輔助類ObjectChangeTracker
而且我發現另一個在互聯網上,POCO實體發生器,其基於ObjectGenerator
上下文和實體類如POCO與額外的代碼用於跟蹤導航屬性,如下:
public virtual ICollection<Guest> GuestsAddress
{
get
{
if (_guestsAddress == null)
{
var newCollection = new FixupCollection<Guest>();
newCollection.CollectionChanged += FixupGuestsAddress;
_guestsAddress = newCollection;
}
return _guestsAddress;
}
set
{
if (!ReferenceEquals(_guestsAddress, value))
{
var previousValue = _guestsAddress as FixupCollection<Guest>;
if (previousValue != null)
{
previousValue.CollectionChanged -= FixupGuestsAddress;
}
_guestsAddress = value;
var newValue = value as FixupCollection<Guest>;
if (newValue != null)
{
newValue.CollectionChanged += FixupGuestsAddress;
}
}
}
}
private ICollection<Guest> _guestsAddress;
其中FixupCollection是的ObservableCollection
一個簡單的增強,實現ClearItems
和InsertItem,
如下
public class FixupCollection<T> : ObservableCollection<T>
{
protected override void ClearItems()
{
new List<T>(this).ForEach(t => Remove(t));
}
protected override void InsertItem(int index, T item)
{
if (!this.Contains(item))
{
base.InsertItem(index, item);
}
}
}
我想問的提醒上他們會更適合ü通過WCF服務來實現CRUD,以及一些關於實現這一點的最佳實踐的指導方針。
感謝
感謝您的建議。我開始使用DbContext方法 – bzamfir