我有一個實體,集國家,反映了我的數據庫的數據庫表 '<' CHAR(2),焦炭(3),爲nvarchar(50>。的EntityFramework,插入如果不存在,否則更新
我有一個解析器,它返回一個解析國家的Country []數組,並且正在以正確的方式更新它的問題。我想要的是:以國家數組爲單位,對於那些尚未在數據庫中的國家插入它們,而那些已有的更新,如果任何領域是不同的。如何才能做到這一點?
void Method(object sender, DocumentLoadedEvent e)
{
var data = e.ParsedData as Country[];
using(var db = new DataContractEntities)
{
//Code missing
}
}
我想這樣
for(var c in data.Except(db.Countries)) but it wount work as it compares on wronge fields.
希望以前任何人都有過這個問題,並且對我有一個解決方案。如果我不能使用Country對象並插入/更新它們的數組很容易,我沒有看到使用該框架的很多好處,因爲從執行者我認爲它更快地編寫一個自定義的SQL腳本插入它們而不是等檢查一個國家在插入之前已經在數據庫中了?
解決方案
請參閱後的回覆。
我加覆蓋等於我的祖國類:
public partial class Country
{
public override bool Equals(object obj)
{
if (obj is Country)
{
var country = obj as Country;
return this.CountryTreeLetter.Equals(country.CountryTreeLetter);
}
return false;
}
public override int GetHashCode()
{
int hash = 13;
hash = hash * 7 + (int)CountryTreeLetter[0];
hash = hash * 7 + (int)CountryTreeLetter[1];
hash = hash * 7 + (int)CountryTreeLetter[2];
return hash;
}
}
,然後做:
var data = e.ParsedData as Country[];
using (var db = new entities())
{
foreach (var item in data.Except(db.Countries))
{
db.AddToCountries(item);
}
db.SaveChanges();
}
此外,您可以使用新發布的庫,它會自動設置實體圖中所有實體的定義。你可以閱讀[我對類似問題的回答](http://stackoverflow.com/questions/5557829/update-row-if-it-exists-else-insert-logic-with-entity-framework/39609020#39609020) 。 –