【问题标题】:Using Custom and EF POCO Entities Together一起使用自定义和 EF POCO 实体
【发布时间】:2015-02-24 06:36:07
【问题描述】:

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

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

构建 MyStudent.cs 的另一个原因是数据库列名不好 例如写的

由 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. 仅需要采用数据优先方法的解决方案/建议。

谢谢

【问题讨论】:

    标签: entity-framework poco


    【解决方案1】:

    当然,您可以这样做。我建议创建一个数据传输库并映射您的对象(例如使用 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();
                    }
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-02
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      • 1970-01-01
      相关资源
      最近更新 更多