我正在使用LINQtoSQL创建级联删除IE:如果删除了类别,那么该类别中的所有产品也将被删除。
我已经设置了产品资源库(IProductsRepository),现在我在我的类别资源库中工作,为级联添加业务域逻辑。
产品库有这种方法:
public void DeleteProducts(IList<Product> Products)
{
foreach (Product product in Products)
{
productsTable.DeleteOnSubmit(product);
}
productsTable.Context.SubmitChanges();
}
然后我在我的类别存储库中创建一个删除类别方法:
public void DeleteCategory(Category category)
{
IProductsRepository productsRepository;
var CascadeDeleteProducts =
from Products in productsRepository.Products
where Products.CategoryID == category.CategoryID
select Products;
productsRepository.DeleteProducts(CascadeDeleteProducts.ToList());
categoriesTable.DeleteOnSubmit(category);
categoriesTable.Context.SubmitChanges();
}
Visual Studio 2010在此行的上述函数中给出了错误:from Products in productsRepository.Products
。它说
使用未分配的局部变量'productsrepository'
可能导致此错误的原因是什么?我正在通过DI创建产品存储库:IProductsRepository productsRepository;
。我做错了什么?
我忽略了提到我正在使用Ninject来实例化产品库。所以我认为这一行:IProductsRepository productsRepository;
正在有效地声明和初始化产品库。
答案 0 :(得分:1)
您正在创建存储库的实例,但您从未初始化它。
该行应如下所示:
IProductRepository productsRepository = new ProductRepository();
或者您应该允许调用者注入(方法或构造函数)存储库:
public void DeleteCategory(Category category,
IProductRepository productRepository)
{
}
<强>更新强>
如果您正在使用nInject进行依赖注入,那么您的方法声明应该是这样的(假设您已正确配置nInject以注入依赖项):
[Inject]
public void DeleteCategory(Category category,
IProductRepository productRepository)
{
}
答案 1 :(得分:0)
贾斯汀说的正是......但只是为了澄清......
IProductsRepository productsRepository = new ProductsRepository();
但是,如果每个存储库都实例化它自己的DataContext对象,那么您可能会遇到问题。在这种情况下,LINQ将反对您在两个单独的DataContext对象中处理相同的相关数据(因为您创建的每个DataContext对象都会跟踪已更改的记录)。