3
我有一个导入过程中的区域,位置和班次,其中Shift对象具有Location属性,Location对象具有Region属性。如果地区名称不存在,我创建该地区,并且像明智的地点。我认为我可以巧妙地将'选择是否存在或创建'逻辑封装到区域和位置的助手类中,但是如果我在这些类中使用本地数据上下文,我会遇到附加和分离变得不愉快的开销。如果我在这些类中包含数据上下文依赖关系,那么我的封装感觉破坏了。如何使用LINQ to EF实现“选择或插入”任务?
实现此目标的理想方法是什么?或者放置此功能的理想位置在哪里?在我的例子中,我大量使用.NET 4.0提供的外键,并且避免使用实体来支持直接的外键值,但这已经开始闻起来了。
例子:
public partial class ActivationLocation
{
public static int GetOrCreate(int regionId, string name)
{
using (var ents = new PvmmsEntities())
{
var loc = ents.ActivationLocations.FirstOrDefault(x => x.RegionId == regionId && x.Name == name);
if (loc == null)
{
loc = new ActivationLocation {RegionId = regionId, Name = name};
ents.AddToActivationLocations(loc);
ents.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
}
return loc.LocationId;
}
}
}
谢谢@Craig,看起来相当有用。可惜我必须等到使用EF 4,直到我的第一个原型后,但我可以睡着我目前的丑陋代码knopwing优雅的解决方案是在转角处。 – ProfK 2010-04-13 15:23:25