实体框架延迟加载问题

时间:2013-03-15 18:44:55

标签: c# entity-framework

我喜欢将我的雇主存储库放在公司课程中 在我的工作单位内。我试过下面的测试代码。 从数据库重新加载数据后,我的雇主存储库为null 我有懒惰加载活动。

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();

如果我得到这些工作,那么另一个问题应该是:可以使用我的IObservableRepository(实现ICollection) 而不是我雇主的ICollection。我也想把所有公司的雇主都放在一起 单一实体。

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

3 个答案:

答案 0 :(得分:1)

在我看来,您还没有在代码文件中实际创建公司和员工之间的关系。您已将公司部分关闭 - 与员工集合 - 但您需要在Employee上包含一些属性以最终确定关系:

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; }
}

答案 1 :(得分:1)

已禁用ProxyCreationEnabled。感谢IronMan84解决了另一个问题。

答案 2 :(得分:0)

首先请允许我说你的代码有点乱。 UnitOfWorkCompany(单数)和Employers(复数)。你做unitOfWork.companys.Add(小写)和unitOfWork.companys.Employers.Add(??)。并且...... Employers集合由Employee组成?我认为这些都是拼写错误。

因此,如果我读得很好,您可以插入CompanyEmployee,但绝不会将两者联系起来。你应该有一个像

这样的陈述
company.Employees.Add(employee1);

  

是否可以使用我的IObservableRepository(实现ICollection)代替我的雇主的ICollection

不,不是。 EF不会为您创建IObservableRepository<Employee>。它甚至不知道它应该首先使用哪个具体类,但它需要一个由EntityCollection或集合类(如HashSetList实现的接口。