WCF CRUD DAL实体框架的推荐结构
我需要为应用程序实现一个后台层。它必须通过EF4实现数据访问,并通过WCF服务将数据访问公开为CRUD。使用WCF数据服务不是一个选项,因为要求公开TCP服务端点 我看到Vs 2010中的EF附带了三个EF代码生成器模板:WCF CRUD DAL实体框架的推荐结构,wcf,entity-framework,entity-framework-4,crud,Wcf,Entity Framework,Entity Framework 4,Crud,我需要为应用程序实现一个后台层。它必须通过EF4实现数据访问,并通过WCF服务将数据访问公开为CRUD。使用WCF数据服务不是一个选项,因为要求公开TCP服务端点 我看到Vs 2010中的EF附带了三个EF代码生成器模板: DbContextgenerator,将从DbContext派生的上下文和实体类生成为非常简单的POCO,无需额外代码 public partial class MyEntities : DbContext {...} 和实体类 .... public int EmailA
DbContext
generator,将从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; }
其中,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);
}
}
}
public类FixupCollection:ObservableCollection
{
受保护的覆盖无效ClearItems()
{
新列表(this).ForEach(t=>Remove(t));
}
受保护的覆盖无效插入项(int索引,T项)
{
如果(!this.Contains(项目))
{
基本插入项(索引,项目);
}
}
}
我想征求您的意见,其中哪一个更适合用于通过WCF服务实施CRUD,以及关于实施此服务的最佳实践的一些指南
谢谢
DataContract(IsReference=true)
和DataMember
属性,否则序列化对象图时将出现循环引用异常(实体及其关系,其中主体和从属对象彼此都具有导航属性)。一旦使用对象图,您还必须进行自己的更改跟踪或数据合并,因为。如果您不打算传输对象图,而只传输单个对象或相同对象的列表,您应该同意这种方法EntityObject
特定于实体框架,将其公开给客户端是一个坏主意。默认情况下,它可以由WCF序列化,但它也传输特定于EF的信息,如EntityKey
。服务点应该是隐藏其内部实现,并且公开基于EntityObject
的实体是违法的它也不能解决变更跟踪问题最后一种方法是使用自定义非实体类(DTOs=数据传输对象)和隐藏服务中DTO和实体之间的转换。这将允许您创建更复杂和合适的对象集,但也会使您的应用程序更复杂并增加开发复杂性。这也是实现您自己的更改跟踪时的选项。谢谢您的建议。我从DbContext开始方法
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);
}
}
}