一起使用自定义和EF POCO实体

时间:2015-02-24 06:36:07

标签: entity-framework poco

在我的一个项目中,EF 5.0在abcModel.tt下为我生成POCO实体,这很好,因为我可以在我的项目中使用这些实体,但如果我在其中应用验证,那么当我从DB更新.edmx时它会丢失。所以作为一个解决方案,我也手工构建所有实体

由EF POCO生成的Student.cs MyStudent.cs由我生成

构建MyStudent.cs的另一个原因是DB列名称不太好 例如写的

按EF生成

Student.cs
{
    public int sid; // not good name due to table column name
    public string sfname; // not good name due to table column name
    public string slname; // not good name due to table column name
}

由我建造

MyStudent.cs
{
    public int StudentId;
    public string FirstName;
    public string LastName;
}

所以我想知道我的方法是否有双实体可以吗?

注意:

  1. 我无法更改表列名称,因为db太大了&已经由dba建立。
  2. 只需要使用Data First方法的解决方案/建议。
  3. 由于

1 个答案:

答案 0 :(得分:0)

当然,你可以这样做。我建议创建一个数据传输库并映射您的对象(如使用AutoMapper)。然后,当您需要从数据库检索数据或从数据库保存数据时,请调用您的DT并返回业务对象(您的其他类)。

这样的事情:

public class StudentDT
        {
            public StudentBO GetStudent(int id)
            {
                using (var db = new dbContext())
                {
                    var studentDB = db.Students.First(s => s.sid == id);
                    StudentBO sbo = Mapper.Map<StudentBO>(studentDB);
                    return sbo;
                }
            }

            public void SaveStudent(StudentBO sbo)
            {
                using (var db = new dbContext())
                {
                    var sdb = Mapper.Map<Student>(sbo);
                    db.Students.Add(sdb);
                    db.SaveChanges();
                }
            }
        }