1

我使用实体框架创建了 WCF 服务。

我有 2 张桌子:剧院和地方。局部性作为剧院的外键。

我的方法:

public theater[] GetTheaters()
{

    using (Entities context = new Entities())
    {
        return context.theater.ToArray();

    }
}

我必须在我的戏剧课上从“public virtual locality locality { get; set; }”中删除“virtual”关键字。否则,我会收到 CommunicationException。

但是当我这样做时,我得到了我的剧院列表,但地点是空的......

我怎样才能得到地方?

谢谢

我的模型类(我也有其他实体):

    public partial class locality
    {
        public locality()
        {
            this.theater = new HashSet<theater>();
        }

        public int idLocality { get; set; }
        public int npa { get; set; }
        public string locality1 { get; set; }

        public  ICollection<theater> theater { get; set; }
    }


    public partial class theater
    {
        public theater()
        {
            this.session = new HashSet<session>();
        }

        public int idTheater { get; set; }
        public string name { get; set; }
        public string address { get; set; }
        public int idLocality { get; set; }
        public double latitude { get; set; }
        public double longitude { get; set; }
        public int seats { get; set; }
        public string phone { get; set; }
        public string email { get; set; }
        public bool threeD { get; set; }

        public  locality locality { get; set; }
        public  ICollection<session> session { get; set; }
    }

这是我得到的错误:

“'locality' 类型的对象图包含循环,如果禁用引用跟踪,则无法序列化。

编辑 :

我找到的解决方案:

在我的地方课上,我有一系列剧院。

我不得不像这样将“私有”添加到设置器中:

“公共 ICollection 剧院 { 获取; 私人集合; }”

所以它有效,但我仍然有一个问题,我不能再从地方实体访问剧院了。(不再是双向的)

4

3 回答 3

1

如果要强制加载相关实体,可以使用Include 方法来执行此操作。默认情况下,相关实体会延迟加载。

你的例子是:

public theater[] GetTheaters()
{

    using (Entities context = new Entities())
    {
        return context.theater.Include(t=>t.Locality).ToArray();

    }
}
于 2013-06-19T19:49:31.640 回答
0

您可以使用急切加载或显式加载。通过急切加载,您可以使用Include扩展方法:

return context.Theater.Include(t => t.Locality).ToArray();
于 2013-06-19T19:48:19.763 回答
0

您缺少创建关系的正确注释。请参阅下面的代码。(或者如果使用 FluentAPI,则自己创建关系)

查找[Key][ForeignKey]注释,以及virtual关键字。

public partial class locality
    {
        public locality()
        {
            //this.theater = new HashSet<theater>();
        }

        [Key]
        public int idLocality { get; set; }

        public int npa { get; set; }
        public string locality1 { get; set; }

        public virtual ICollection<theater> theaters { get; set; }
    }


    public partial class theater
    {
        public theater()
        {
            //this.session = new HashSet<session>();
        }

        [Key]
        public int idTheater { get; set; }

        public string name { get; set; }
        public string address { get; set; }
        public int idLocality { get; set; }
        public double latitude { get; set; }
        public double longitude { get; set; }
        public int seats { get; set; }
        public string phone { get; set; }
        public string email { get; set; }
        public bool threeD { get; set; }

        [ForeignKey("idLocality")]
        public virtual locality locality { get; set; }
        //public ICollection<session> session { get; set; }
    }
于 2013-06-19T20:49:54.257 回答