打破WCF的多个实体框架表

时间:2014-03-23 21:11:19

标签: c# wcf entity-framework entity-framework-6

我没想到我疯了所以我回去做了一个示例项目来重现并展示发生了什么。

我有4个简单的项目,如下面的

enter image description here

我将EDMX添加到数据项目

enter image description here

这是我的表格结构

enter image description here

以下是EDMX的属性

enter image description here

生成的类

enter image description here

将对WCF服务库的引用添加到数据项目

enter image description here

使用默认测试

测试Wcf客户端

enter image description here

添加Wcf方法

enter image description here

而她正在要求EF6参考

enter image description here

添加引用后我的方法就像这样

enter image description here

再次运行测试客户端我得到此异常

enter image description here

所以我从Data.Edmx项目中复制连接字符串并将其添加到WCF项目

并运行测试客户端,并在EDMX中只有一个表是正确的返回。

enter image description here

但是当我更新模型并像正常一样添加多个表时,它会中断。所以我只添加了一个表(如下所示),它打破了这个错误。它适用于任何表格。模型中有多个表格无法使用。

我缺少一步吗?或者为什么多个表使用EF6.1打破WCF?

enter image description here

enter image description here

编辑这也打破了它

enter image description here

使用类似

的课程
public partial class Item
{
    public int ItemId { get; set; }
    public string Name { get; set; }
    public int CategoryId { get; set; }

    public virtual Category Category { get; set; }
}

public partial class Category
{
    public Category()
    {
        this.Categories1 = new HashSet<Category>();
        this.Items = new HashSet<Item>();
    }

    public int CategoryId { get; set; }
    public string Name { get; set; }
    public Nullable<int> ParentId { get; set; }

    public virtual ICollection<Category> Categories1 { get; set; }
    public virtual Category Category1 { get; set; }
    public virtual ICollection<Item> Items { get; set; }
}

1 个答案:

答案 0 :(得分:4)

这里的问题是当WCF调用返回时,它会尝试序列化对象(也包括导航属性)。

public virtual Category Category { get; set; }

public virtual ICollection<Category> Categories1 { get; set; }
public virtual Category Category1 { get; set; }
public virtual ICollection<Item> Items { get; set; }

如果您不需要导航属性,则只需将其标记为私有或内部属性即可。

您还可以查看此链接以获取更多详细信息Entity Framework Navigation Properties looping issue though WCF