Entity Framework 4.0模型没有获取所有数据

时间:2017-11-11 15:49:31

标签: c# entity-framework wcf

我正在尝试将模型发送到wcf服务。 首先我有一个序列化问题,但我通过设置

解决了它
ContextOptions.ProxyCreationEnabled = false;

推荐人DataContractSerializer Error using Entity Framework 4.0 with WCF 4.0 但现在模型属性税和产品为空

public ClientWindowViewModel()
    {
        Ip = ServerWindowViewModel.LocalIP;
        db = new STOREDBEntities();
        db.Configuration.ProxyCreationEnabled = false;
        products = db.Products;//.Where(p => p.IsSynced == false)
    }

产品型号

public partial class Product
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public Product()
        {
            this.Categories = new HashSet<Category>();
        }

        public int Id { get; set; }
        public string ProductName { get; set; }
        public byte[] Image { get; set; }
        public bool IsDeleted { get; set; }
        public bool IsSynced { get; set; }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Category> Categories { get; set; }
        public virtual Tax Tax { get; set; }
    }

发送到WCF服务器

channel.Update(checkedProducts);

2 个答案:

答案 0 :(得分:0)

如果我错了,请纠正我,你想通过WCF合同发送Product类,在发送之后你只得到空值和默认值吗?

如果没有在Product类中设置[DataContract],[DataMember]等适当的注释,则无法通过WCF发送对象。

在类上方设置[DataContract],在每个属性上方设置[DataMember]。如果没有这个,消息将无法正确序列化。

答案 1 :(得分:0)

我认为问题不在WCF中。问题是我正在设置

ContextOptions.ProxyCreationEnabled = false;

它没有获得产品和税 我必须写 .Include("PropertyName")包含它

Products = dbGet.Products.Include("Categories").Include("Tax").ToList();

但当我尝试将列表发送到服务器时添加.Include("PropertyName")方法时,我在序列化中获得了异常(关于循环。产品具有产品实例,产品具有类别实例...) 我通过将循环instacnes设置为null来解决它

foreach (var item in products)
        {
            foreach (var ct in item.Model.Categories)
            {
                ct.Products = null;
            }
            item.Model.Tax.Product = null;
        }

如果有人知道关于禁用骑行的更好解决方案,请写下来!