我正在使用EF5 Model First。我真的不明白EDM中自动生成的类是什么。根据一些文档,这些类是POCO,但为什么它们在上下文中使用? 假设我有一个Student实体,那么我在上下文中得到一个Student POCO类和一个DbSet StudentSet属性。 下一条说明是否会将POCO放入我的数据库中?
MyContext.StudentSet.Add(johndoe);
MyContext.SaveChanges();
所以EF使用POCO传输数据?实际上,我错过了POCO与实体或DTO交换数据以及实体将数据放入数据库时的步骤。
答案 0 :(得分:2)
EDM生成的类是ORM / Persistence类。您可以使用该类从/向数据库查询/进行更改。在进行数据库更改时,您需要将任何DTO对象转换为POCO对象。
ORM是关于将对象映射到数据库中的数据,而不是处理insert into
语法以将记录插入应用程序中的数据库,而是使用StudentSet.Add
来添加新数据。 johndoe
信息将被翻译成sql语法,EF会在将每个属性转换为查询时将每个属性映射到每个列。
Add
方法会将johndoe
信息作为Added
存储在内存中,但不会立即执行到数据库。如果您使用其他Add
方法,则也会将其标记为Added
。在您调用SaveChanges
的那一刻,所有更改都将通过发送生成的查询保存到数据库中。
在添加johndoe
之前,DTO和EF实体之间的映射已经发生。您可能在UI中使用了另一个DTO类。您需要手动映射它或使用映射器库从DTO对象创建POCO对象。例如:
// studentDto as parameter
var johndoe = new Student
{
Name = studentDto.StudentName,
Age = studentDto.StudentAge
};
MyContext.StudentSet.Add(johndoe);
// studentDto might have another information as well
var johndoeSubject = new Subject
{
Name = studentDto.SubjectName,
Years = studentDto.SubjectYears
};
MyContext.SubjectSet.Add(johndoeSubject);
MyContext.SaveChanges();