实体框架 ProxyCreation

Entity Framework ProxyCreation

提问人:sam it 提问时间:7/16/2018 最后编辑:sam it 更新时间:7/17/2018 访问量:54

问:

我的实体框架问题

我有函数返回我的列表:

    public IEnumerable<Entity1> GetmyEntity1ById(int Id1 , int Id2)
            {

        var myEntity1DbSet = Set<myEntity1>();
        var myEntity2DbSet = Set<myEntity2>();

        var query = myEntity1DbSet.Where(e => e.Id == Id1)
                        .Join(myEntity2DbSet.Where(e2 => e2.id== Id2),
                              e1=> e1.id,
                              e2=> e2.id,
                              (e1, e2) => e1

       );

return query.ToList()

当我第一次加载日期很好时

获取 System.Data.Entity.DynamicProxies.myEntity1 的列表

List<object>  = 
{
  System.Data.Entity.DynamicProxies.myEntity1,
System.Data.Entity.DynamicProxies.myEntity1,
System.Data.Entity.DynamicProxies.myEntity1
}

但是当我将数据库中的新实体添加到我的 myEntity1 时 并再次加载数据,我得到错误

在此处输入图像描述

现在我的列表是 System.Data.Entity.DynamicProxies.myEntity1 + 对象 myEntity1 :(存储在数据库中的新值)

List<object>  = 
{
  System.Data.Entity.DynamicProxies.myEntity1,
System.Data.Entity.DynamicProxies.myEntity1,
System.Data.Entity.DynamicProxies.myEntity1,
myEntity1
}

它抛出错误

System.NullReferenceException

如果我在异常后重新启动我的应用程序,我会 获取我的新实体

并会得到

List<object>  = 
{
  System.Data.Entity.DynamicProxies.myEntity1,
System.Data.Entity.DynamicProxies.myEntity1,
System.Data.Entity.DynamicProxies.myEntity1,
System.Data.Entity.DynamicProxies.myEntity

}

我看到的是,每次当我的列表在 System.Data.Entity.DynamicProxies.myEntity1 和 myEntity1 之间混合时,它都会抛出错误

我发现错误在哪里,因为我的模型 myEntity1 包含 myEntity2

    public class myEntity1  

        {
           public int id {get; set;}

           public myEntity2  entity2{get; set;}   

        }

public class myEntity2  
{
   public int {get; set;}
   public prop myProp {get; set;}
}

异常是抛出,因为当我在UI中时,我试图得到

myEntity1.entity2.myProp 

我的问题是如何强制实体框架一直返回 System.Data.Entity.DynamicProxies.myEntity1 而不是 myEntity1 因为当它返回 myEntity1 时,myEntity2 始终为 null

C# 实体框架

评论


答:

0赞 sam it 7/17/2018 #1

我找到了解决我问题的方法 在查询结束时,我包含我的 entity2 以确保已附加

var query = myEntity1DbSet.Where(e => e.Id == Id1)
                        .Join(myEntity2DbSet.Where(e2 => e2.id== Id2),
                              e1=> e1.id,
                              e2=> e2.id,
                              (e1, e2) => e1
                            ). Include(e1=>e1.entity2)

它确实解决了我的问题,但直到现在我都不明白 为什么在我更新数据库中的实体后进行实体框架 它返回 System.Data.Entity.DynamicProxies.myEntity1 和对象 myEntity1 之间的混合,而不是所有 System.Data.Entity.DynamicProxies.myEntity1??????