Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework ASP.NETMVC与存储库_Entity Framework_Asp.net Mvc 2_C# 4.0_Repository Pattern - Fatal编程技术网

Entity framework ASP.NETMVC与存储库

Entity framework ASP.NETMVC与存储库,entity-framework,asp.net-mvc-2,c#-4.0,repository-pattern,Entity Framework,Asp.net Mvc 2,C# 4.0,Repository Pattern,我有4个不同的模型,我从中提取视图中网格的信息。这段代码摘录是我的索引操作控制器的一部分。每个 模型有一个存储库、partRepository、parts\u comboRepository、vendor\u partRepository和manufacturer\u partRepository,我使用这些存储库获取连接数据 var nss_part_combo = from o in parts_comboRepository.FindAll_Parts_Combos()

我有4个不同的模型,我从中提取视图中网格的信息。这段代码摘录是我的索引操作控制器的一部分。每个 模型有一个存储库、partRepository、parts\u comboRepository、vendor\u partRepository和manufacturer\u partRepository,我使用这些存储库获取连接数据

var nss_part_combo = 
    from o in parts_comboRepository.FindAll_Parts_Combos()
        join parts in partRepository.FindAll_Parts()
        on o.FK_Parts_ID_PARTS equals parts.ID_PARTS into joined_parts
     from parts in joined_parts.DefaultIfEmpty()
        join vendor_parts in vendor_partRepository.FindAllVendor_Parts()
        on o.FK_Vendor_Parts_ID_VENDOR_PARTS equals vendor_parts.ID_VENDOR_PARTS into joined_vendor_parts
     from vendor_parts in joined_vendor_parts.DefaultIfEmpty()
        join manufacturer_parts in manufacturer_partRepository.FindAllManufacturer_Parts()
        on o.FK_Manufacturer_Parts_ID_MANUFACTURER_PARTS equals manufacturer_parts.ID_MANUFACTURER_PARTS into joined_manufacturer_parts
     from manufacturer_parts in joined_manufacturer_parts.DefaultIfEmpty()
     select new NSS.ViewModel.Part_ComboViewModel
     {
         ...
     };

return View(new GridModel(part_combo));

当我运行它时,我会得到一个关于不同上下文的错误。我修复了这个问题,在控制器顶部声明了一个实体,并使用它而不是我的存储库对象来获取连接的所有IEnumerable。这是个好办法吗?我觉得我已经偏离了我应该做的,创造了一个黑客来解决我的问题。解决此问题的最佳做法是什么?

我正在使用此方法:

// I'm using top level class - UnitOfWork which is Abstract factory for my Data access layer 
// Unit of work is the only class which can get me instances of repositories
// It is also the holder for ObjectContext
public class UnitOfWork : IUnitOfWork, IDisposable
{
    private ObjectContext _context;

    public UnitOfWork(string connectionString)
    {
        if (String.IsNullOrEmpty(connectionString))
        {
            throw new ArgumentNullException("connectionString");
        }

        _context = new ObjectContext(connectionString);
    }

    private IRepository<Post> _postRepository;

    public IRepository<Post> PostRepository
    {
       get
       {
           if (_postRepository == null)
           {
              // Repositories are defined in the same assembly as UnitOfWork and have internal contructor. 
               _postRepository = new PostRepository(_context);
           }

           return _postRepository;
       }
    }

    // Other repositories

    // Dispose()

    // Unit of work saves changes made to entities from all repositories.
    public void Flush()
    {
       _context.SaveChanges();
    }
}
//我正在使用顶级类-UnitOfWork,它是我的数据访问层的抽象工厂
//工作单元是唯一可以获取存储库实例的类
//它也是ObjectContext的持有者
公共类UnitOfWork:IUnitOfWork,IDisposable
{
私有对象上下文_上下文;
公共工作单元(字符串连接字符串)
{
if(String.IsNullOrEmpty(connectionString))
{
抛出新ArgumentNullException(“connectionString”);
}
_上下文=新的ObjectContext(connectionString);
}
私人IRepository\u postRepository;
公共IRepository PostRepository
{
得到
{
if(_postRepository==null)
{
//存储库与UnitOfWork在同一程序集中定义,并具有内部构造函数。
_postRepository=新的postRepository(_上下文);
}
return\u postRepository;
}
}
//其他存储库
//处置
//工作单元保存从所有存储库对实体所做的更改。
公共图书馆
{
_SaveChanges();
}
}

基于应用程序的复杂性,UnitOfWork被业务层作为依赖项注入使用,或者直接被控制器作为依赖项注入使用。您必须创建自定义ControllerFactory并使用IoC注入它。UnitOfWork在IoC中定义为每个HTTP请求生存期实例化。

有关如何管理
ObjectContext
生存期的大量讨论,请参阅。谢谢,这很有用,我不确定要查找哪些关键字来描述我的问题,但这很有帮助。