2015-04-24 93 views
1

我從另一個數據庫中複製大量數據到我的數據庫已經得到了不同的結構比我 - 我創建對象,將它們添加到DbSet並調用SaveChanges()方法。但是如果一條記錄無效,則方法SaveChanges()將引發錯誤,並且沒有記錄被插入到數據庫中。我想保存正確的記錄,而不是 - 我怎樣才能做到這一點在Entity Framework保存記錄的,即使我們在他們中的一些錯誤

DatabaseContext db = new DatabaseContext(); 

Gifts gift1 = new Gifts(); 
gift1.Name = "test1"; 
gift1.Price = 5; 
db.Gifts.Add(gift1); 

// Here ERROR - because name can't be NULL: 
Gifts gift2 = new Gifts(); 
gift2.Name = null; 
gift2.Price = 5; 
db.Gifts.Add(gift2); 

Gifts gift3 = new Gifts(); 
gift3.Name = "test3"; 
gift3.Price = 5; 
db.Gifts.Add(gift3); 

// ..... 

DatabaseContext.SaveChanges(); 

回答

0

try catch塊只需附上代碼並保存saperately每個實體:

DatabaseContext db = new DatabaseContext(); 

try{ 
    Gifts gift1 = new Gifts(); 
    gift1.Name = "test1"; 
    gift1.Price = 5; 
    db.Gifts.Add(gift1); 

    DatabaseContext.SaveChanges(); 
} 
catch{} 

// Here ERROR - because name can't be NULL: 
try{ 
    Gifts gift2 = new Gifts(); 
    gift2.Name = null; 
    gift2.Price = 5; 
    db.Gifts.Add(gift2); 

    DatabaseContext.SaveChanges(); 
} 
catch{} 

try{ 
    Gifts gift3 = new Gifts(); 
    gift3.Name = "test3"; 
    gift3.Price = 5; 
    db.Gifts.Add(gift3); 

    DatabaseContext.SaveChanges(); 
} 
catch{} 
+0

但我認爲這可能是如果我叫的SaveChanges()爲每個實體,因爲我有百萬實體太慢,很我對嗎? – Alexander

+0

當然,這絕不會結束於數百萬個實體。那麼爲什麼不在應用層應用驗證? –

相關問題