我不建议您调用 save changes 而不是仅仅为了共享代码(即只调用一次FindVenue())。
为了解决想要拯救城市的其他方法的问题,这里有几个想法......
选项 1:创建一个 create city 的重载方法(就像你建议的那样CreateAndSaveCity),它将调用第一个方法CreateCity(不保存更改)然后保存更改
public void FindVenue()
{
// find venue in db
// If not in db - find from 3rd party api
// If from 3rd party api check if city exits in db
// If city does not exist...
CreateCity(context);
// If venue does not exist create a new venue record in db
context.SaveChanges();
}
public void CreateCity(YourContext context)
{
// Create city, don't save changes
}
public void CreateAndSaveCity(YourContext context)
{
CreateCity();
context.SaveChanges();
}
在这种情况下,如果你想从其他地方的控制器创建一个城市,你可以调用CreateAndSaveCity(context)
选项 2:让CreateCity方法采用可选的布尔参数,指示是否应保存更改。根据您最常见的用例,您可以将可选参数的默认值设置为 true 或 false,或者如果您想确保始终明确指定它,则将其设为必需。
public void FindVenue()
{
// find venue in db
// If not in db - find from 3rd party api
// If from 3rd party api check if city exits in db
// If city does not exist...
CreateCity(context);
// If venue does not exist create a new venue record in db
context.SaveChanges();
}
public void CreateCity(YourContext context, bool saveChanges = false)
{
// Create city
if (saveChanges) {
context.SaveChanges();
}
}
在这种情况下,如果你想从其他地方的控制器创建一个城市,你可以调用CreateCity(context, true)
就个人而言,我更喜欢选项 2,但这主要是语义问题。
另外,关于您的评论:
你当然可以说这些是分开的,如果可以插入城市,那么为什么不这样做
这取决于您的业务逻辑的需求。但即使在这种情况下,您仍然可以在检查是否应创建场地(并在需要时创建)后保存更改。如果您实际上不需要单独保存城市(例如,在插入后获取其 id 以设置外键),则没有理由进行数据库往返。