2016-10-18 7 views
0

私はEF 5(6ではなく)を使用しています。私はクラス以下のオブジェクトを持っており、それはEFを使ってDBにあります。後で更新前にプロパティが実際に変更されるかどうかを確認するには

public class Student 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
    public DateTime DOB { get; set;} 
} 

は私が同じオブジェクト/レコードの更新を行うための要求を得ました。

更新を呼び出す前に、私は更新のための同じレコードを取得する可能性があるので、プロパティが実際に変更されたかどうか比較したいと思いますので、ブラインドの更新をしたくありません。

var student = _context.Students.select(x =>x.Name == "").first(); 
student.name = ""; 
student.age = ""; 
student.DOB = ""; 
_context.Entry(student).State = EntityState.Modified; 
_context.saveChanges(); 

EFはこれにいくつか組み込まれていますか?

または、各プロパティを1つずつ比較して判断する必要がありますか?私は20のプロパティを持つことができます...

何かお考えですか?

+0

「更新のために同じレコードを取得する可能性があります」とはどういう意味ですか?あなたのレコードにプライマリキーがありませんか? – CodeCaster

+0

プライマリキーを持っていると私の質問に何か違いがありますか?保存したレコードに主キーがあります。後で名前、年齢、DOBパラメータを送信するだけで、同じメソッドを呼び出す人がいます。今私は盲目の更新を呼び出すか、少なくともプロパティを最初に比較するかどうかを判断する必要がありますか?私がEFについて何か不足している場合を除きます – simbada

+0

'_context.Entry(student).State = EntityState.Modified;'行を削除すると、EFがあなたにチェックを行います。 –

答えて

0

EqualsメソッドとIEquatable<T>インターフェイスを使用して、2つのオブジェクトが等しいかどうかを知ることができますが、オブジェクト間の違いを知ることはできません。

1

以下の文:

_context.Entry(student).State = EntityState.Modified; 
_context.saveChanges(); 

は、このように汚れとしてマークされたエンティティの関連するすべてのフィールドを、更新します。

を:あなたが特定の値を更新したい場合は、背後にあるコードに次のようになります

_context.Student.Attach(student) 

を使用してください

UPDATE student 
SET Value 1 = 'whatever student name is', 
    Value 2 = 'whatever student name is' 
WHERE Id = 123; 

:その背後にあるコードで

はこのようなものです

UPDATE student 
    SET Value 1 = 'whatever student name is' 
WHERE Id = 123; 

更新前にプロパティが変更されているかどうかを確認したい場合は、oのequalsメソッドをオーバーライドしますあなたが望む性質をbjectと比較:

public override bool Equals(object obj) 
{ 
    return MyProperty == ((MyObject)obj).MyProperty 
} 
0

をEF 6

context.ChangeTracker.HasChanges() 

以降でDbContextは、新たな追跡、削除、または変更された場合のマニュアルを

のチェックを参照してくださいSaveChangesが呼び出された場合にデータベースに送信されるエンティティまたは関係。

DBChangeTracker Class

それとも、この方法Secrets of DetectChanges

がUPDATEどのようにこのブログから読み取ることができます:EF 5については 、代替

return this.ChangeTracker.Entries().Any(e => e.State == EntityState.Added 
               || e.State == EntityState.Modified 
               || e.State == EntityState.Deleted); 

がある。この答えではありません私はこのからanswerを取るので、適切な人に信用を与える。

+0

残念ながら私はEF 6ではなく、EF 6にも近づかないでしょう。 – simbada

+1

@simbada申し訳ありませんがバージョンが指定されていませんでした。これは参照用です – Sherlock

+1

@simbadaあなたの質問がバージョン固有のものであれば、その重要な情報を質問に追加してください。 –

関連する問題