StructureMap - EF初始化可变从另一个类
我有一个使用DbContext
添加和插入产品产品逻辑类。StructureMap - EF初始化可变从另一个类
我还有一个ProductImporter
类,它循环访问文件中的产品列表并调用Product
类中的addProduct
。它在交易中这样做,因此所有产品都添加或没有。伪在下面。
产品类有两个构造函数。第一个接受dbcontext,第二个初始化一个新的dbcontext。我使用第一个构造函数来传递ProductImporter
中的DbContext
以启用事务。
var dbContext...
ImportProducts() {
Product p = new Product(dbContext);
dbContext.BeginTransaction
While(moreProducts)
p.addProduct();
End transaction
}
我的问题是:我该如何使用结构图来满足这两种情况:
注入产品类的新实例,每当应用程序需要添加一个产品。
-
在上述
ImportProducts
方法中注入Product
类以使用相同的DbContext
。实际上,通过结构图替换下面的行来注入产品类并使其与ProductImporter
类使用相同的DbContext
。Product p = new Product(dbContext);
感谢。
没有对任何类的,我只能推测代码 - 但似乎你是混合数据类和逻辑/服务类 - 这可以引领你进入难以维持和难以落实的问题(后者是什么你正在经历)。
我的建议是让你的产品类只保存数据 - 没有逻辑可言。您可以使用存储库模式来执行此操作。我找到了一个链接,给你一个例子:http://web.archive.org/web/20150404154203/https://www.remondo.net/repository-pattern-example-csharp/
请仔细阅读上面的链接和研究模式 - 它会为你节省大量的时间和头痛。如果你理解了这种模式,请查看通用知识库他们将为您节省更多时间,并使您的代码更容易维护。
这里的关键是你有一个单独的类为数据/实体/模型和逻辑/服务/(使用数据库)的另一个类。
然后你只需要你的资料库有DbContext
注入和存储库可以注射给进口商。
例如:
这是未经测试和即兴代码。我只是试图提供一个解决方案的例子。
public class ProductImporter
{
private readonly IProductRepository _productRepository;
public ProductImporter(IProductRepository productRepository)
{
this.__productRepository = this._productRepository;
}
public void AddProducts(IEnumerable<Product> products)
{
foreach(var product in products)
{
this._productRepository.Add(product);
}
}
...
}