次の方法で共有


Table<TEntity>.Attach メソッド

定義

DataContext にエンティティをアタッチします。

オーバーロード

Attach(TEntity)

オプティミスティック コンカレンシー チェックで元の値が必要なときに、接続解除されたエンティティまたは "デタッチ" されたエンティティを新しい DataContext にアタッチします。

Attach(TEntity, Boolean)

変更された状態または変更されていない状態の DataContext にエンティティをアタッチします。

Attach(TEntity, TEntity)

変更された状態または変更されていない状態の DataContext に、エンティティおよびその元の状態を指定して、エンティティをアタッチします。

注釈

メソッドは Attach 、1 つ DataContextで作成され、クライアントにシリアル化されてから逆シリアル化されたエンティティと共に使用します (更新または削除操作を実行する目的で)。 詳細については、「N 層アプリケーションでのデータ取得および CUD 操作 (LINQ to SQL)」を参照してください。

シリアル化によって Attach デタッチされていないエンティティには実行しないでください。 シリアル化されていないエンティティは、2 番目のデータ コンテキストによってエンティティが追跡された場合に予期しない結果を引き起こす可能性がある遅延ローダーとの関連付けを維持します。

新しいエンティティがアタッチされると、すべての子コレクション (たとえば、 EntitySet 関連付けられたテーブルのエンティティのコレクション) の遅延ローダーが初期化されます。 が呼び出されると SubmitChanges 、子コレクションのメンバーが状態になります Unmodified 。 子コレクションのメンバーを更新するには、明示的に を呼び出 Attach して、そのエンティティを指定する必要があります。

Attach は、指定されたオブジェクトのオブジェクト グラフ内のすべてのエンティティをアタッチします。 次に例を示します。

using (var db = new SampleDataContext())
{  
    var employee = new Employee { employeeId = 1 };  

    var master = new Master();  
    master.Employee = employee;  

    var child = new Child();  
    child.Employee = employee;  

    db.Employees.Attach(employee);  

    master.Child = child;  

    db.Masters.InsertOnSubmit(master);  

    db.SubmitChanges();  
} 
Using db As New SampleDataContext()
    Dim employee As New Employee With { .employeeId = 1 }

    Dim master As New Master()  
    master.Employee = employee  

    Dim child As New Child()  
    child.Employee = employee  

    db.Employees.Attach(employee)  

    master.Child = child  

    db.Masters.InsertOnSubmit(master)  

    db.SubmitChanges()  

End Using  

を呼Employeeび出すとAttach、従業員、マスター、および子がアタッチされます。これは、 にはマスターと子のEmployee両方に関係があるためです。 状態をアタッチから挿入に変更するには、 を明示的に 呼び出 InsertOnSubmit す必要があります。

Attach(TEntity)

オプティミスティック コンカレンシー チェックで元の値が必要なときに、接続解除されたエンティティまたは "デタッチ" されたエンティティを新しい DataContext にアタッチします。

public:
 void Attach(TEntity entity);
public:
 virtual void Attach(TEntity entity);
public void Attach (TEntity entity);
member this.Attach : 'Entity -> unit
abstract member Attach : 'Entity -> unit
override this.Attach : 'Entity -> unit
Public Sub Attach (entity As TEntity)

パラメーター

entity
TEntity

アタッチするエンティティの元の値。

実装

注釈

メソッドは Attach 、1 つ DataContextで作成され、クライアントにシリアル化された後、逆シリアル化されたエンティティと共に使用して、更新または削除操作を実行します。 新しい DataContext には、切断されたエンティティの元の値を追跡する方法がないため、クライアントはそれらの値を指定する必要があります。 このバージョンの Attachでは、エンティティは元の値の状態であると見なされます。 このメソッドを呼び出した後、たとえばクライアントから送信された追加のデータを使用して、そのフィールドを更新できます。

新しいエンティティがアタッチされると、すべての子コレクション (たとえば、 EntitySet 関連付けられたテーブルのエンティティのコレクション) の遅延ローダーが初期化されます。 が呼び出されると SubmitChanges 、子コレクションのメンバーが状態になります Unmodified 。 子コレクションのメンバーを更新するには、明示的に を呼び出 Attach して、そのエンティティを指定する必要があります。

詳細については、「N 層アプリケーションでのデータ取得および CUD 操作 (LINQ to SQL)」を参照してください。

シリアル化によって Attach デタッチされていないエンティティには実行しないでください。 シリアル化されていないエンティティは、2 番目のデータ コンテキストによってエンティティが追跡された場合に予期しない結果を引き起こす可能性がある遅延ローダーとの関連付けを維持します。

適用対象

Attach(TEntity, Boolean)

変更された状態または変更されていない状態の DataContext にエンティティをアタッチします。

public:
 void Attach(TEntity entity, bool asModified);
public void Attach (TEntity entity, bool asModified);
member this.Attach : 'Entity * bool -> unit
Public Sub Attach (entity As TEntity, asModified As Boolean)

パラメーター

entity
TEntity

アタッチするエンティティ。

asModified
Boolean

エンティティを変更されたとしてアタッチする場合は true。エンティティを変更されていないとしてアタッチする場合は false

注釈

変更済みとしてアタッチする場合、エンティティはバージョン メンバーを宣言するか、更新の競合チェックに参加しないようにする必要があります。 新しいエンティティがアタッチされると、すべての子コレクション (たとえば、 EntitySet 関連付けられたテーブルのエンティティのコレクション) の遅延ローダーが初期化されます。 が呼び出されると SubmitChanges 、子コレクションのメンバーが状態になります Unmodified 。 子コレクションのメンバーを更新するには、明示的に を呼び出 Attach して、そのエンティティを指定する必要があります。

適用対象

Attach(TEntity, TEntity)

変更された状態または変更されていない状態の DataContext に、エンティティおよびその元の状態を指定して、エンティティをアタッチします。

public:
 void Attach(TEntity entity, TEntity original);
public void Attach (TEntity entity, TEntity original);
member this.Attach : 'Entity * 'Entity -> unit
Public Sub Attach (entity As TEntity, original As TEntity)

パラメーター

entity
TEntity

アタッチするエンティティ。

original
TEntity

元の状態を格納しているデータ メンバーと同じ種類のエンティティのインスタンス。

using (Northwnd db2 = new Northwnd(@"c:\northwnd.mdf"))
{
    Customer Cust_File = new Customer();
    string xmlFile = "";

    // Get the original object from the deserializer.
    Customer c = SerializeHelper.Deserialize<Customer>
        (xmlFile, Cust_File);

    // Set all the desired properties to the entity to be attached.
    Customer c_updated = new Customer() { CustomerID = c.CustomerID,
        Phone = "425-123-4567", CompanyName = "Microsoft" };
    db2.Customers.Attach(c_updated, c);

    // Perform last minute updates, which will still take effect.
    c_updated.Phone = "425-765-4321";

    // SubmitChanges()sets the phoneNumber and CompanyName of
    // customer with customerID=Cust. to "425-765-4321" and
    // "Microsoft" respectively.
    db2.SubmitChanges();
}
Using db = New Northwnd("...")
    Dim Cust_File As New Customer()
    Dim xmlFile As String = ""

    'Get the original object from the deserializer.
    Dim c As Customer = SerializeHelper.Deserialize(Of Customer)(xmlFile, Cust_File)

    ' Set all the desired properties to the entity to be attached.
    Dim c_updated As New Customer With {.CustomerID = c.CustomerID, _
    .Phone = "425-123-4567", .CompanyName = "Microsoft"}
    db.Customers.Attach(c_updated, c)

    ' Perform last minute updates, which will still take effect. 
    c_updated.Phone = "425-765-4321"

    ' SubmitChanges()sets the phoneNumber and CompanyName of
    ' customer with customerID=Cust. to "425-765-4321" and
    ' "Microsoft" respectively.
    db.SubmitChanges()
End Using

注釈

次の例では、オブジェクトは既に Customer 正しく構成されています。 更新プログラムを再生しなくても を呼び出 Attach すことができます。

新しいエンティティがアタッチされると、すべての子コレクション (たとえば、 EntitySet 関連付けられたテーブルのエンティティのコレクション) の遅延ローダーが初期化されます。 が呼び出されると SubmitChanges 、子コレクションのメンバーが状態になります Unmodified 。 子コレクションのメンバーを更新するには、明示的に を呼び出 Attach して、そのエンティティを指定する必要があります。

適用対象