Мне нужно реализовать бэк-офисный уровень для приложения.Он должен будет реализовать доступ к данным через EF4 и предоставить доступ к данным как CRUD через службы WCF.Использование службы данных WCF не вариант, потому что требования представляют конечную точку службы TCP.
Я вижу, что EF в Vs 2010 поставляется с тремя шаблонами генератора кода для EF:
DbContext
генератор, генерирует контекст, полученный из DbContext
и классов сущностей как очень простые POCO без дополнительного кода;
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);
}
}
}
Iхотел бы спросить уr посоветуйте, какой из них будет более подходящим для использования для реализации CRUD через службу WCF, и некоторые рекомендации по передовым методам реализации этого.
Спасибо