2010-08-29 59 views
1

我有一個進口,從平面文件對SQL Server,其中很少的記錄實際上改變的EDM(運行它無數次用相同的導入文件),但仍然調用SaveChanges調用更新500條記錄需要相當長。我猜這是因爲我在實體對象上設置了每個屬性,然後EF使用ReportPropertyChanged來表示記錄必須在數據庫中更新。只是因爲屬性更改或僅當它具有不同的值時EF會更新對象嗎?

我是不是真的有所有的進口recort屬性值與實體屬性值,並且只分配給實體屬性時,它們之間的區別,以避免這些冗長的「什麼也不做」的更新?

編輯: 的引領者更新屬性生成的代碼看起來像下面。我可以看到這個任務是無條件的,這就是爲什麼我要問是否實際生成對數據庫的UPDATE語句是有條件的。

set 
{ 
    OnUpdatedChanging(value); 
    ReportPropertyChanging("Updated"); 
    _Updated = StructuralObject.SetValidValue(value); 
    ReportPropertyChanged("Updated"); 
    OnUpdatedChanged(); 
} 

回答

2

您是否使用生成的實體代碼?它已經檢查數值是否相同:

[EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)] 
[DataMemberAttribute()] 
public global::System.Int32 Id 
{ 
    get 
    { 
     return _Id; 
    } 
    set 
    { 
     if (_Id != value) 
     { 
      OnIdChanging(value); 
      ReportPropertyChanging("Id"); 
      _Id = StructuralObject.SetValidValue(value); 
      ReportPropertyChanged("Id"); 
      OnIdChanged(); 
     } 
    } 
} 
private global::System.Int32 _Id; 
partial void OnIdChanging(global::System.Int32 value); 
partial void OnIdChanged(); 
+0

請參閱我的編輯。爲我生成的代碼沒有警惕。我正瞄準.NET 4.0 – ProfK 2010-09-21 08:31:36

相關問題