理论对此有何看法?哪两个是正确的方法?
让我们选择两个实体 - 一个Question实体和一个Tag实体,就像在StackOverflow中一样。假设下面的代码是控制器的方法的一部分,该方法应该创建一个Question实体。请记住,问题可能包含标签。所以,这个方法应该同时创建一个问题及其标签(如果有的话)。
Qustion questionDbContext = new Qustion();
// Mapping the model properties to the entity's ones.
questionDbContext.Title = questionModel.Title;
questionDbContext.Body = questionModel.Body
// More mapping..
// ...
// Here Entity Framework will add all the necessary Tag and QuestionTag entities automatically.
questionDbContext.Tags = questionModel.Tags.Select(t => new Tag(t)).ToList();
this.questionsRepository.Add(questionDbContext);
this.questionsRepository.Save();
我能想到的另一种方法是完全不同的。
Qustion questionDbContext = new Qustion();
// Mapping the model properties to the entity's ones.
questionDbContext.Title = questionModel.Title;
questionDbContext.Body = questionModel.Body
// More mapping..
// ...
// Tag mapping
foreach(var tag in questionModel.Tags)
{
Tag tagDbContext = new Tag();
tagDbContext.Name = tag.Name
// More mapping..
this.tagsRepository.Add(tagDbContext);
}
this.questionsRepository.Add(questionDbContext);
this.questionsRepository.Save();
this.tagsRepository.Save();
那么,哪种方法是对的?如果他们都没有,分享你的,谢谢你:)。
答案 0 :(得分:0)
首先,我认为这更适合代码审查,而不是SO。但要回答你的问题,在我的轶事经历中,差异非常小。我会说你最容易使用,并阅读。在那个方面,我会亲自去找第一个。
Side注意:如果你确实想要走foreach()路线,而速度是一个主要因素,我会改为使用正常的for循环
for(int i=0;i<QuestionModel.Tags;i++){...}
因为简单的for循环比foreach循环更快。以太网方式我仍然倾向于可读性而不是小的性能提升。