我需要为应用程序实现后台层。它必须通过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