我喜欢将我的雇主存储库放在公司课程中 在我的工作单位内。我试过下面的测试代码。 从数据库重新加载数据后,我的雇主存储库为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>>(); } }
}
答案 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)
首先请允许我说你的代码有点乱。 UnitOfWork
有Company
(单数)和Employers
(复数)。你做unitOfWork.companys.Add
(小写)和unitOfWork.companys.Employers.Add
(??)。并且...... Employers
集合由Employee
组成?我认为这些都是拼写错误。
因此,如果我读得很好,您可以插入Company
和Employee
,但绝不会将两者联系起来。你应该有一个像
company.Employees.Add(employee1);
是否可以使用我的IObservableRepository(实现ICollection)代替我的雇主的ICollection
不,不是。 EF不会为您创建IObservableRepository<Employee>
。它甚至不知道它应该首先使用哪个具体类,但它需要一个由EntityCollection
或集合类(如HashSet
或List
实现的接口。