WCF 和实体框架 4.1 POCO

Posted

技术标签:

【中文标题】WCF 和实体框架 4.1 POCO【英文标题】:WCF and Entity framework 4.1 POCO 【发布时间】:2012-03-05 06:38:08 【问题描述】:

`我有以下实体框架4.1模型。

public partial class AWLTR2Model : DbContext

    public AWLTR2Model()
        : base("name=AWLTR2Model")
    
        Configuration.ProxyCreationEnabled = false;
    

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    
        throw new UnintentionalCodeFirstException();
    

    public DbSet<Address> Addresses  get; set; 
    public DbSet<Customer> Customers  get; set; 
    public DbSet<CustomerAddress> CustomerAddresses  get; set; 

我有以下 POCO 实体,它位于不同的名称空间 AWLTR2.Entity

using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
public partial class CustomerAddress


    public int CustomerID  get; set; 
    public int AddressID  get; set; 
    public string AddressType  get; set; 
    public System.Guid rowguid  get; set; 
    public System.DateTime ModifiedDate  get; set; 

    public virtual Address Address  get; set; 
    public virtual Customer Customer  get; set; 


我通过 WCF 服务 (BasicHTTPBinding) 公开了这些实体,但在我的客户端中,我无法将子实体添加到父实体,如下所示。

  Customer c = new Customer
        
            FirstName = "xx",
            CompanyName = "zz",
            EmailAddress = "xx@a.com",
            LastName = "yy",
            ModifiedDate = DateTime.Now,
            NameStyle = false,
            PasswordHash = "abcd",
            PasswordSalt = "abcd",
            Phone = "xx",
            rowguid = System.Guid.NewGuid()
        ;

        CustomerAddress ca = new CustomerAddress 
         
            AddressID = 9 , 
            Customer = c , 
            AddressType ="Home Office", 
            ModifiedDate=System.DateTime.Now, 
            rowguid = System.Guid.NewGuid()
        ;

客户端中缺少 add 方法,但我可以在不暴露 WCF 的情况下执行此操作。 如下所示。 c.CustomerAddresses.Add(ca);

我想写一个方法来一次性添加客户以及地址和客户地址。我使用带有对象上下文的实体框架 4.0 实现了相同的目标。但在 Dbcontext 中无法这样做。

有什么线索吗?

【问题讨论】:

【参考方案1】:

如果客户端上不存在 Add 方法,则很可能意味着您已将服务引用添加到 WCF 服务,但您没有更改集合的默认类型 - 默认为数组。

配置您的服务参考并在高级设置中将集合类型更改为列表。

【讨论】:

以上是关于WCF 和实体框架 4.1 POCO的主要内容,如果未能解决你的问题,请参考以下文章

用实体框架和 POCO 类替换遗留数据层的策略

实体框架 4.1 自引用

EF4 POCO:快照与 WCF 上的自我跟踪

实体框架中的 POCO 是啥? [关闭]

IQueryable 实体框架 POCO 映射

没有行为的实体框架 POCO - 需要重新设计以消除代码异味