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