是的,我知道EF不支持IEnumerable,需要使用ICollection。但...
我有两个班级
public class Group
{
public Guid ID;
public String Title { get; private set; }
private readonly List<Student> _students;
public IEnumerable<Student> Students { get { return _students; } }
public void AddStudent(Student student)
{
if (_students.Any(x => x == student))
throw new StudentException();
_students.Add(student);
}
}
和
public class Student
{
public Guid ID;
public String FirstName { get; private set; }
public String LastName { get; private set; }
}
这是我的域名图层。 DB层引用了域层。问题是为什么我必须更改DB Layer的域层?当然,我不必。域层不了解DB层。正确?
重要!我不想更改我的DB Layer的域层。那么,我如何通过CodeFirst流畅的api创建表? (一个小组有很多学生,学生有零个或一个小组。)
答案 0 :(得分:1)
好吧,您可以将DbContext配置为具有不带导航属性的映射。但是,您必须手动填充学生属性。
modelBuilder.Entity<Patient>()
.HasRequired(s => s.Group)
.WithMany();
如果你想让它自动填充,你将不得不使用ICollection(你不能吃蛋糕也吃它)。
也许您应该考虑使用接口来编写代码,这样您就不必担心私有集,只读集合等等。类似的东西:
public interface IGroup
{
Guid ID { get; }
String Title { get; }
IEnumerable<IStudent> Students { get; }
void AddStudent(IStudent student);
}
只是一个建议:)。