Я пытаюсь сохранить в двух разных таблицах. Взяв данные из Taxlaw и сохраняя, я сохраняю те же данные в таблице taxlawhistory. Это похоже на копирование данных из одной таблицы в другую, и это не работает. Ошибка, которую я получаю, это
Cannot convert from Model.TaxLaw to Model.TaxTableHisory
public async Task<bool> SaveOrUpdate(IEnumerable<TaxLaw> obj)
{
using (var trans = _taxhistoryrepo.DbContext.Database.BeginTransaction())
{
var lists = new List<TaxTableHistory>();
foreach (var list in obj)
{
lists.CompanyCode = list.CompanyCode;
lists.CummulativeAmount = list.CummulativeAmount;
lists.Percentage = list.Percentage;
lists.ModifiedDate = DateTime.UtcNow;
lists.ModifiedDate = list.ModifiedDate;
lists.Status = EntityStatus.Active;
_taxhistoryrepo.DbSetEntity.Add(lists);
await _taxhistoryrepo.DbContext.SaveChangesAsync();
await Task.FromResult(_repository.SingleSave(obj));
}
trans.Commit();
}
return true;
}
Вы можете привести мне пример? я не понимаю тебя
поскольку вы добавляете список TaxLaw в TaxTableHistory, вам необходимо создать новую TaxTableHistory, назначить ей данные и добавить созданную TaxTableHistory





Пытаться :
public async Task<bool> SaveOrUpdate(IEnumerable<TaxLaw> obj)
{
using (var trans = _taxhistoryrepo.DbContext.Database.BeginTransaction())
{
// var lists = new List<TaxTableHistory>();
foreach (var taxLaw in obj)
{
var taxTableHistory = new TaxTableHistory();
taxTableHistory.CompanyCode = taxLaw.CompanyCode;
taxTableHistory.CummulativeAmount = taxLaw.CummulativeAmount;
taxTableHistory.Percentage = taxLaw.Percentage;
taxTableHistory.ModifiedDate = DateTime.UtcNow;
taxTableHistory.ModifiedDate = taxLaw.ModifiedDate;
taxTableHistory.Status = EntityStatus.Active;
_taxhistoryrepo.DbSetEntity.Add(taxTableHistory);
await _taxhistoryrepo.DbContext.SaveChangesAsync();
await Task.FromResult(_repository.SingleSave(obj));
}
trans.Commit();
}
return true;
}
obj имеет тип
IEnumerable<TaxLaw>
так что каждый элемент
TaxLaw
Тогда вы пытаетесь сэкономить в
_taxhistoryrepo
который, как я полагаю, использует
TaxHistory
Эта часть кода:
foreach (var list in obj)
{
list.CompanyCode = list.CompanyCode;
list.CummulativeAmount = list.CummulativeAmount;
list.Percentage = list.Percentage;
list.ModifiedDate = DateTime.UtcNow;
list.ModifiedDate = list.ModifiedDate;
list.Status = EntityStatus.Active;
_taxhistoryrepo.DbSetEntity.Add(list);
await _taxhistoryrepo.DbContext.SaveChangesAsync();
await Task.FromResult(_repository.SingleSave(obj));
}
Itarates через obj, поэтому "список" будет TaxLaw, но здесь:
_taxhistoryrepo.DbContext.SaveChangesAsync()
Вы добавляете тип TaxLaw в таблицу TaxHistory
Я также считаю, что это опечатка, как и вы
list.CompanyCode = list.CompanyCode;
...
Что в основном устанавливает одну и ту же переменную с той же переменной
Я полагаю, вы хотели достичь:
public async Task<bool> SaveOrUpdate(IEnumerable<TaxLaw> obj)
{
using (var trans = _taxhistoryrepo.DbContext.Database.BeginTransaction())
{
var lists = new List<TaxTableHistory>();
foreach (var list in obj)
{
var taxHistory = new TaxHistory();
taxHistory.CompanyCode = list.CompanyCode;
taxHistory.CummulativeAmount = list.CummulativeAmount;
taxHistory.Percentage = list.Percentage;
taxHistory.ModifiedDate = DateTime.UtcNow;
taxHistory.ModifiedDate = list.ModifiedDate;
taxHistory.Status = EntityStatus.Active;
//manually mapped TaxLaw into TaxHistory
_taxhistoryrepo.DbSetEntity.Add(taxHistory); // save TaxHistory
await _taxhistoryrepo.DbContext.SaveChangesAsync();
await Task.FromResult(_repository.SingleSave(list)); //here save "list" not obj as you would save whole collection each iteration of the loop
}
trans.Commit();
}
return true;
}
Хотя следующий код может решить вашу проблему, вы можете использовать AutoMapper для сопоставления одного объекта с другим.
public async Task<bool> SaveOrUpdate(IEnumerable<TaxLaw> obj)
{
using (var trans = _taxhistoryrepo.DbContext.Database.BeginTransaction())
{
foreach (var list in obj)
{
_taxhistoryrepo.DbSetEntity.Add(new TaxTableHistory {
CompanyCode = list.CompanyCode,
CummulativeAmount = list.CummulativeAmount,
Percentage = list.Percentage,
ModifiedDate = DateTime.UtcNow,
ModifiedDate = list.ModifiedDate,
Status = EntityStatus.Active
});
await _taxhistoryrepo.DbContext.SaveChangesAsync();
await Task.FromResult(_repository.SingleSave(obj));
}
trans.Commit();
}
return true;
}
Вы пытались добавить объект Model.TaxLaw в репозиторий TaxTableHisory, потому что obj является IEnumerable из TaxLaw.
foreach (var list in obj)
_taxhistoryrepo.DbSetEntity.Add(list);
Вам нужно создать новый объект типа TaxTableHisory и добавить этот объект.
public async Task<bool> SaveOrUpdate(IEnumerable<TaxLaw> taxLawList)
{
using (var trans = _taxhistoryrepo.DbContext.Database.BeginTransaction())
{
foreach (var taxLaw in taxLawList)
{
var taxTableHisory = new TaxTableHisory();
taxTableHisory.CompanyCode = taxLaw.CompanyCode;
taxTableHisory.CummulativeAmount = taxLaw.CummulativeAmount;
taxTableHisory.Percentage = taxLaw.Percentage;
taxTableHisory.ModifiedDate = taxLaw.ModifiedDate;
taxTableHisory.Status = EntityStatus.Active;
_taxhistoryrepo.DbSetEntity.Add(taxTableHisory);
await _taxhistoryrepo.DbContext.SaveChangesAsync();
}
trans.Commit();
}
return true;
}
Ps: вероятно, taxTableHisory - это ошибка типа taxTableHistory
вы не создали новую переменную, переменная списка такая же, и ваш цикл for фактически ничего не делает, потому что обе переменные одинаковы