我使用asp.net樣板與實體框架。 我有2個實體:有多對多關係的產品和供應商。在實體框架中複製記錄多對多關係使用Asp.net Boilerplate
我的問題:當我保存一個產品和一個或多個供應商,產品和保存在supplierProduct表的關係,但供應商記錄被複制在供應商表。
我讀的是因爲有來自不同背景的實體2,所以我需要「附加」的供應商的產品範圍內。我不知道該怎麼做。有人可以幫助我嗎?
我的實體:
public class Product : FullAuditedEntity
{
public Product()
{
Suppliers = new HashSet<Supplier>();
}
public string Name { get; set; }
public virtual ICollection<Supplier> Suppliers { get; set; }
}
public class Supplier : FullAuditedEntity
{
public Supplier()
{
Products = new HashSet<Product>();
}
public string Name { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
我叫ProductManager域名服務
public async Task<Product> Create(Product entity)
{
var product = _repositoryProduct.FirstOrDefault(x => x.Id == entity.Id);
if (product != null)
{
throw new UserFriendlyException("Product already exists.");
}
else
{
return await _repositoryProduct.InsertAsync(entity);
}
}
我叫ProductAppService應用服務:
public async Task Create(CreateProductInput input)
{
Product output = Mapper.Map<CreateProductInput, Product>(input);
await _productManager.Create(output);
}
我CreateProductInput數據傳輸對象
public class CreateProductInput
{
public string Name { get; set; }
public ICollection<Supplier> Suppliers { get; set; }
}
我的角度成分的產品列表的組件
// GET Products
function getProducts() {
productService.listAll()
.then(function (result) {
vm.users = result.data;
});
}
getProducts();
// GET Suppliers
function getSuppliers() {
supplierService.listAll()
.then(function (result) {
vm.suppliers = result.data;
});
}
getSuppliers();
//Save the data
vm.save = function() {
abp.ui.setBusy();
productService.create(vm.product)
.then(function() {
abp.notify.info(App.localize('SavedSuccessfully'));
$uibModalInstance.close();
}).finally(function() {
abp.ui.clearBusy();
getProducts();
});
}
你還沒有包含最相關的方法實現 - 'Product'倉庫的'InsertAsync'。 –
其從asp.net樣板的方法https://github.com/aspnetboilerplate/aspnetboilerplate –
那麼,默認的通用存儲庫實現是相當天真的,顯然不適用於具有相關數據的實體。很可能你需要實現定製存儲庫。 –