다음을 통해 공유


Table<TEntity>.Attach 메서드

정의

DataContext에 엔터티를 연결합니다.

오버로드

Attach(TEntity)

낙관적 동시성 검사를 위해 원래 값이 필요한 경우 연결이 끊기거나 "분리된" 엔터티를 새 DataContext에 연결합니다.

Attach(TEntity, Boolean)

엔터티를 수정된 상태나 수정되지 않은 상태로 DataContext에 연결합니다.

Attach(TEntity, TEntity)

엔터티 및 원래 상태를 모두 지정하여 엔터티를 수정되거나 수정되지 않은 상태로 DataContext에 연결합니다.

설명

Attach 에서 DataContext만든 엔터티와 함께 메서드를 사용하고, 클라이언트에 직렬화된 다음, 다시 역직렬화합니다(업데이트 또는 삭제 작업을 수행하려는 의도). 자세한 내용은 데이터 검색 및 CUD 작업에서 N 계층 애플리케이션 (LINQ to SQL)합니다.

serialization을 Attach 통해 분리되지 않은 엔터티를 시도하지 마세요. 직렬화되지 않은 엔터티는 엔터티가 두 번째 데이터 컨텍스트에 의해 추적될 경우 예기치 않은 결과를 초래할 수 있는 지연된 로더와의 연결을 유지 관리합니다.

새 엔터티가 연결되면 모든 자식 컬렉션(예 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 하면 직원, master 및 자식이 연결됩니다. 왜냐하면 Employee 은 master 자식과 관계가 있기 때문입니다. 명시적으로 를 호출 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 에서 DataContext만든 엔터티와 함께 메서드를 사용하여 클라이언트에 직렬화된 다음 다시 역직렬화하여 업데이트 또는 삭제 작업을 수행합니다. 새 DataContext 는 연결이 끊긴 엔터티에 대한 원래 값을 추적할 방법이 없으므로 클라이언트는 해당 값을 제공할 책임이 있습니다. 이 버전의 Attach에서는 엔터티가 원래 값 상태인 것으로 간주됩니다. 이 메서드를 호출한 후 해당 필드를 업데이트할 수 있습니다(예: 클라이언트에서 전송된 추가 데이터).

새 엔터티가 연결되면 모든 자식 컬렉션(예 EntitySet : 연결된 테이블의 엔터티 컬렉션)에 대한 지연 로더가 초기화됩니다. SubmitChanges 가 호출되면 자식 컬렉션의 멤버가 상태에 놓입니다Unmodified. 자식 컬렉션의 멤버를 업데이트하려면 명시적으로 를 호출 Attach 하고 해당 엔터티를 지정해야 합니다.

자세한 내용은 데이터 검색 및 CUD 작업에서 N 계층 애플리케이션 (LINQ to SQL)합니다.

serialization을 Attach 통해 분리되지 않은 엔터티를 시도하지 마세요. 직렬화되지 않은 엔터티는 엔터티가 두 번째 데이터 컨텍스트에 의해 추적될 경우 예기치 않은 결과를 초래할 수 있는 지연된 로더와의 연결을 유지 관리합니다.

적용 대상

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 하고 해당 엔터티를 지정해야 합니다.

적용 대상