C# 实体框架延迟加载问题

C# 实体框架延迟加载问题,c#,entity-framework,C#,Entity Framework,我喜欢在我的公司类中有我的雇主库 在我的工作单元里。我已经尝试了下面的测试代码。 从数据库重新加载数据后,我的雇主存储库为空。 我有惰性加载活动 public class Company { public int Id { get; set; } public string CompanyName { get; set; } public ICollection<Employee> Employers { get; set; } } public class

我喜欢在我的公司类中有我的雇主库 在我的工作单元里。我已经尝试了下面的测试代码。 从数据库重新加载数据后,我的雇主存储库为空。
我有惰性加载活动

public class Company
{
    public int Id { get; set; }
    public string CompanyName { get; set; }
    public ICollection<Employee> Employers { get; set; }
}

public class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string SureName { get; set; }
}   

TEST CODE :

var company = new Company();

var employee1 = new Employee();
employee.Name = "myFirst employee";

unitOfWork.companys.Add(companys);
unitOfWork.Commit();

unitOfWork.companys.Employers.Add(employee1);

uow.Commit();
上市公司
{
公共int Id{get;set;}
公共字符串CompanyName{get;set;}
公共ICollection{get;set;}
}
公营雇员
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共字符串SureName{get;set;}
}   
测试代码:
var公司=新公司();
var employee1=新员工();
employee.Name=“我的第一个员工”;
unitOfWork.companys.Add(公司);
unitOfWork.Commit();
unitOfWork.companys.Employers.Add(雇员1);
提交();
如果我能让它们工作,另一个问题应该是:是否可以使用我的IObservableRepository(实现ICollection) 而不是为我的雇主收集。我还想把所有公司的所有雇主像一个公司一样放在一起 单一实体

public class UnitOfWork
{
    public IObservableRepository<Company> Company { get { return GetRepo<IObservableRepository<Company>>(); } }
    public IObservableRepository<Employee> Employers { get { return GetRepo<IObservableRepository<Employee>>(); } }
}
公共类UnitOfWork
{
公共IObservableRepository公司{get{return GetRepo();}}
公共IObservableRepository{get{return GetRepo();}}
}

在我看来,您还没有在代码文件中创建公司与员工之间的关系。您已经完成了公司的一部分,包括员工的集合,但您还需要在员工上包含两个属性,以最终确定关系:

public class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string SureName { get; set; }

    [ForeignKey("Company"), Required]
    public int CompanyID { get; set; }

    public virtual Company Company { get; set; }
}

首先,请允许我说,您的代码有点混乱<代码>工作单位有
公司
(单数)和
雇主
(复数)。您可以执行
unitOfWork.companys.Add
(小写)和
unitOfWork.companys.Employers.Add
(??)。而且。。。由
员工组成的
雇主
集合?我想这些都是打字错误

因此,如果我能很好地理解你的话,你可以插入一个
公司
和一个
员工
,但不要将两者联系起来。你应该有这样的陈述

company.Employees.Add(employee1);

是否可以为我的雇主使用我的IObservableRepository(实现ICollection)而不是ICollection


不,不是。EF不会为您创建
IObservableRepository
。它甚至不知道首先应该使用哪个具体类,但它需要一个由
EntityCollection
HashSet
List
之类的集合类实现的接口,ProxyCreationEnabled被禁用。感谢IronMan84解决了另一个问题。

我认为您需要添加更多的上下文-首先,UnitOfWork代码,以及如何、何时何地调用您发布的代码。您不需要将属性设置为虚拟以进行延迟加载吗?这样做行不通。如果返回空值,则虚拟无法解决此问题。你也是对的。但不管怎么说,很高兴知道。我已经照你说的做了。数据现在存在于雇主表中。雇主表的内容向我表明,公司ID和公司具有正确的参考。我在操作中的Employee集合在重新加载数据后仍然为空。您也可以让上市公司{get;set;}我已经在记事本中编写了这些内容,而不仅仅是这些exmaple的原始内容。到目前为止,IObservableRepository的第二个功能仍然有效。所有员工的IObservableRepository类型的我的表(也在UOW中)在IronMan84的帮助下拥有数据。我的问题是,UOW类中的Observerepository具有表中的数据。在重新加载数据库后,company类中的我的集合对象为null。我认为您仍然没有将employee添加到company的employees中。或者您是否设置了
employee.Company
?我将使用linq表达式将其包含在那里。这样问题就解决了?如果没有,请用当前代码更新您的帖子。我看不出linq表达式如何将公司与员工联系起来。整个问题归结为:如何在数据库中设置
Employee.CompanyId
?延迟加载是次要的。我可以通过构造函数注入dbset的引用,并查询所有雇主,以便在我的company类中设置集合的值。似乎是一个解决办法?我不知道。