Entity framework 英孚。为什么dynamicproxies只为某些实体创建?

Entity framework 英孚。为什么dynamicproxies只为某些实体创建?,entity-framework,Entity Framework,我首先使用实体框架和数据库。我有一个包含实体的edmx文件,其中包括订单和设备 我会做最简单的查询 var o = db.Orders.First(); var d = db.Device.First(); 如果我在这些行之后放置一个断点,并在o和d中添加一个表,我可以看到o的类型是“System.Data.Entity.DynamicProxies.Order_F41BB20DDE174FDA86E0D7716990689D9E5D9260345B31726A97A13750358370”,

我首先使用实体框架和数据库。我有一个包含实体的edmx文件,其中包括订单和设备

我会做最简单的查询

var o = db.Orders.First();
var d = db.Device.First();
如果我在这些行之后放置一个断点,并在o和d中添加一个表,我可以看到o的类型是“System.Data.Entity.DynamicProxies.Order_F41BB20DDE174FDA86E0D7716990689D9E5D9260345B31726A97A13750358370”,而d的类型是“MyNamespace.Device”

为什么没有为设备生成dynamicproxy

因为没有为设备生成代理,所以懒散加载不起作用

我的设备类如下所示:

public partial class Device
{
    protected Device()
    {
        this.ActiveLoadingComputers = new HashSet<ActiveLoadingComputer>();
        this.LoadReports = new HashSet<LoadReport>();
    }

    public int Id { get; protected set; }
    public string Name { get; set; }
    public Nullable<System.DateTime> Updated { get; set; }
    public Nullable<int> LoadingPlace_Id { get; protected set; }

    internal virtual ICollection<ActiveLoadingComputer> ActiveLoadingComputers { get; private set; }
    internal virtual ICollection<LoadReport> LoadReports { get; private set; }
    internal virtual LoadingPlace LoadingPlace { get; private set; }
}

这是由于导航属性集访问器的专用说明符造成的。

这两个类是否都满足创建POCO代理的要求?科林:请回答。属性不是虚拟的或缺少其他要求。我已使用设备类更新了我的问题。我无法确定哪些要求没有得到满足。@ErikZ:
设备
类上的映射属性都不是
虚拟的
,导航属性都不是
公共的
。这违反了“更改跟踪代理”下列出的第一个要求,以及“延迟加载代理”下的单个要求。我不这么认为,请参见我自己的答案。所以你不认为问题出在私有setter上,只是碰巧将你的setter更改为protected,瞧,现在事情开始了,你回答了自己的问题?非常有趣。当然是改变造成了不同,但我的意思是,我可以将其他两个导航属性(查看LoadReports和ActiveLoadingComputers)设置器设置为私有。这不是很奇怪吗?不,这只是意味着其他两个属性仍然不会被代理,并且延迟加载将不适用于它们。好吧,这可能是正确的,但这不是我的问题。我的问题是,包含导航属性的类(设备)没有得到代理。仅更改一个导航属性后,设备类将被代理。另外两个仍然有私人设定者,这就是为什么我没有把你的答案标记为正确的原因。
public partial class Device
{
    public Device(string name) : this()
    {
        Name = name;
    }

}