【问题标题】:Should we use the entities generated by entity framework我们应该使用实体框架生成的实体吗
【发布时间】:2018-10-19 09:00:38
【问题描述】:

您好,我使用具有工作单元模式的实体框架,我想知道在我的应用程序层中是否应该直接使用由实体框架生成的实体,或者在我的应用程序层中重新创建 POCO 对象并映射我的 POCO?

因为我希望我的应用程序层不要对我的实体进行任何引用,所以我想例如在我的解决方案中创建另一个项目,该项目可以将我的实体映射到我的应用程序中的 poco,但我不知道这是否是一个很好的做法,尤其是我不知道该怎么做

提前谢谢你!

【问题讨论】:

  • 这取决于... 您的 ef 类中是否有不应该在您的应用程序中显示的信息?它是一个什么样的应用程序?...
  • 这是一个 asp.net mvc 应用程序。除了在我的视图模型中,我将不得不使用所有信息
  • 我已经更新了我的答案

标签: c# asp.net entity-framework-6


【解决方案1】:

在我的UnitOfWork 中,我使用了一个通用存储库模式,它直接使用 EF 生成的模型。 IRepository<T> 接口看起来有点像这样:

public interface IRepository<T> where T : class
{
    void Add(T entity);
    T GetById(long Id); 
     //etc - all the stuff you probably have
 }

我已经实现了IRepository,称为Repository

public Repository<T> : IRepository<T>
{
     public readonly Infomaster _dbContext;

     public Repository(Infomaster dbContext)
      {
            _dbContext = dbContext;
       }

     public void Add(T entity)
     {
         _dbContext.Set<T>.Add(t);
     }
}

使用集合和类型允许我访问该特定类型的数据集 (dbSet),这允许我创建通用模式。您可以使用特定的类,但工作量要大得多。 这意味着在我的UnitOfWork 中,我只需要执行以下操作:

public class UnitOfWork : IUnitOfWork
{
     //Db context 
     Infomaster _dbContext;

     //User is a model from my EF
     public IRepository<User> UserRepository { get; private set; }

     public UnitOfWork()
     {
         _dbContext = new Infomaster();

          UserRepository = new Repository<User>(_dbContext);
     }

     public int Commit()
     {
          return _dbContext.Save(); 
     }
}

我发现这是最好的方法,并且需要使用模型类,我使用的是代码优先数据库,但我首先使用了数据库。

(从 iPhone - 可以并且将会从笔记本电脑更新)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多