3

従業員オブジェクトに次のように言わせます。

public class Employee
{
    public int Id {get; set;}
    public int Name {get; set;}
    public int Address {get; set;}

 ...other few 10's of properties
}

問題は、名前のみを更新するにはどうすればよいですか?たとえば。名前を更新したい場合は

Employee e = Db.Employees.Where(e => e.Id == someId).SingleOrDefault();
e.Name = "Jack";
Db.SaveChanges();

ご覧のとおり、更新するには、最初にオブジェクトを取得してから更新してから、SaveChanges()を呼び出す必要があります。データベースへの単一のクエリで実行できるタスクの場合、2つのクエリを実行する必要があります。1)オブジェクトを取得します。2)必要なオブジェクトを更新し、変更を保存します。

従来のストアドプロシージャのアプローチでは、IDを渡し、新しいNameを渡し、Updateステートメントを記述すれば完了です。Entity Frameworkは本当に非効率的ですか、それとも何かが足りませんか?

4

2 に答える 2

5

列を選択的に更新できます。

var employee = new Employee() { Id = someId, Name = "Jack" }
Db.Employees.Attach(employee);
Db.Employees.Entry(employee).Property(e => e.Name).IsModified = true;

Db.SaveChanges();

注:.NET4.5を搭載したEF5のみが、への設定IsModifiedをサポートしていますfalse

于 2012-08-05T08:55:38.160 に答える
2

Attachメソッドを使用する必要があります

var e = new Employee() { Id = someId, Name = "Jack" }
Db.Employees.Attach(e);
Db.Employees.Entry(e).Property(p => p.Name).IsModified = true

Db.SaveChanges();
于 2012-08-05T08:41:44.550 に答える