我是MVC的新手,也是项目架构的新手。我有一个带控制器的项目,这些通过接口转到服务,然后通过接口转到存储库(然后我使用EF和SQL)。
这是我的情景。
我的控制器post action有一个Ienumerable语句对象集合。 (我正在导入语句数据行,然后将它们保存在列表中)。
我通过我的服务层调用存储库中的公共bool将该集合保存到我的语句表中:
public bool AddTransactions(Data.statement stat)
{
try
{
_entities.statements.Add(stat);
_entities.SaveChanges();
}
catch(Exception e)
{
string exception =
e.InnerException.ToString();
return false;
}
return true;
}
我只是通过在控制器中循环EACH语句行并在每一行上调用我的bool来实现这一点..这实在是效率低下。
这是控制器代码......
var saveTrans = new Data.statement();
foreach (var transaction in importedData)
{
saveTrans.Description = transaction.Description;
saveTrans.Value = transaction.Value;
saveTrans.Balance = transaction.Balance;
saveTrans.Type = transaction.Type;
_statement.AddTransactions(saveTrans);
}
我想一次性完成这一切。我想直接将我的整个集合(importedData)传递给存储库,并通过一次数据库调用保存它。不幸的是我不得不转换数据所以我不能直接导入语句类,我必须从importedData数据集构建语句对象。
我确信这是显而易见的,但我今天无法想象。我责怪天气。
总之,我需要从foreach循环中取出_statement.AddTransactions&使用来自importedData的数据构建一个data.statement集合,然后将其粉碎六个到我的存储库以保存回我的数据库: - )
...分辨率
我这样做了:
var targetList = productsByName
.Select(x => new Data.statement()
{
Description = x.Description,
Date = x.Date,
Balance = x.Balance,
Value = x.Value,
Type = x.Type
}).ToList();
然后使用:
通过我的图层bool AddNewTransactions(List<statement> stat)