【发布时间】:2015-05-12 16:07:29
【问题描述】:
我有一个使用 Entity Framework 6 的项目,它为一堆不同的实体类型执行添加或更新(即 Upsert)。对于这些实体中的每一个,都有一个代理整数 ID(即主键)、一个用于外部查找的自然键(例如客户 ID)和一组描述性字段(例如名称、描述等)
我有一个 AddOrUpdate 方法,该方法查找自然键,在数据库中查找现有实体,并使用新值(如果存在)更新实体或创建新实体并将其添加到数据库中(如果它不存在)。
这是我想出的方法示例(注意“key”是自然键,而不是代理 ID):
public void AddOrUpdate(int key, string name)
{
var customer = _database.Customers
.FirstOrDefault(p => p.Key == key);
var exists = customer != null;
if (!exists)
customer = new Customer();
customer.Name = name;
// Update other descriptive fields here
if (!exists)
_database.Customers.Add(customer);
_database.Save();
}
代码运行正常,但总感觉有点乱。我很想知道是否有人有更好的方法来解决这个问题,它使用结构更简单、可读性更好、或者可以用更少的代码行(不牺牲可读性)完成,并且仍然很容易进行单元测试。
如果是这样,请发布您对上面代码的重构,以便我可以从您的示例中学习。
【问题讨论】:
-
这似乎在Code Review 上会更好,因为它是工作代码。
-
说实话,这是我第一次听说 Code Review。我会看看它,看看将我的问题迁移到那里是否更有意义。感谢您的信息!
标签: c# database entity-framework linq entity-framework-6