방금 ActiveRecord 패턴을 연구했고이 (http://en.wikipedia.org/wiki/Active_record_pattern)을 기반으로 Linq 2 Sql이 다소 구현 된 것으로 보입니다. 틀렸습니까? 또는 ActiveRecord 패턴을 준수하기 위해 무엇을 변경해야합니까?LINQ to SQL에서 ActiveRecord 패턴을 사용합니까?
답변
어떤면에서는 활성 레코드 패턴처럼 느껴질 수 있지만 실제로는 그렇지 않습니다. 기본 예 :
//load the entity
var c = myDataContext.Customers.FirstOrDefault(c => c.Id == 1876);
c.Name = "George Armstrong Custer";
// saves the entity
myDataContext.SubmitChanges();
활동 기록
//load the entity
var c = Customer.GetCustomer(9);
c.Name = "Varus";
//save the entity
c.Save();
활동 기록은 정말 SQL로 데이터 인터페이스 Linq에 몇 가지 모델 클래스가 다른 경로를 따라 모델을 설명하고 공급하는 하나 개의 클래스를 포함하고 별도의 데이터 인터페이스 (별도로 저장소라고도 함)
추 신 : 활성 레코드 패턴을 사용하는 ORM의 좋은 예를 보려면 Subsonic을 확인하십시오.
+1 예를 들어 제시하면 더 명확합니다 :) –
LINQ to SQL 자체는 ActiveRecord 패턴의 구현이 아닙니다. Fowler의 ActiveRecord 패턴을 실제로 구현하면 객체 자체가 데이터베이스에서 상태를 저장하고로드 할 책임이 있습니다. LINQ to SQL Objects를 사용할 때 DataContext는 데이터베이스 검색, 개체 상태 추적 및 이러한 변경 내용을 다시 데이터베이스에 저장하는 작업을 담당합니다.
더 많은 코드에서 LINQ to SQL 클래스를 래핑하면 ActiveRecord 패턴을 실제로 구현할 수 있습니다 (DataContext에서 책임을 지우는 쉬운 방법은 없습니다).
전적으로 맞는지 확실하지 않습니다. 엔티티 개체와 DataContext 공유 책임 - DataContext는 일반 특성 데이터를 SQL로 변환하기위한 상용구 기능을 제공하지만 엔티티 개체는 개체 멤버와 데이터베이스 간의 매핑을 제공합니다. 또한 개체의 상태 *는 개체 내에 저장됩니다. 다시 말하자면 DataContext는 상태를 조정하기위한 일반적인 상용구 기능 만 가지고 있습니다. –
네 말이 맞아. 그러나 요컨데, ActiveRecord 패턴의 진정한 구현에서와 같이, 그 자체로 모든 것을 다루는 객체보다는 책임이 여전히 공유되어 있습니다. –
linq to sql은 '테이블 당 하나의 클래스'매핑을 제공합니까? 이것이 ActiveRecord의 특징입니다. 도메인 주도 디자인 (Domain Driven Design)과 같은 다른 OO 패턴에서 멀어집니다. –
LINQ to SQL은 Active Record의 구현이 아니므로 엔터티가 자체적 인 지속성 (즉, 지속성 인식)을 완전히 관리해야 함을 의미합니다. LINQ to SQL의 실제 구현은 Unit of Work입니다. 작업 단위는 일종의 레지스트리 또는 컨텍스트가 암시 적 또는 명시 적으로 엔티티의 상태를 추적하여 엔티티가 지속성 메커니즘 (예 : 지속성 감지기)을 완전히 인식 할 수 있음을 의미합니다.
작업 단위 (Unit of of Work)는을 유지 관리하고 separation of concerns을 유지 관리하는 데 도움이되는 POCO (plain old clr object)라는 프로그래밍 스타일을 지원합니다. 이 두 가지 원칙이 충족되면 소프트웨어를 유지 관리하기가 더 쉽습니다. 액티브 레코드 (Active Record)는 실제로 두 주체 모두를 무분별하게하여 더 밀접하게 결합 된 소프트웨어로 유지 보수하기가 더 어려워 질 수 있습니다.
@jrista 흥미로운 ... – GONeale
- 1. LINQ To SQL에서 sp_executesql performant를 사용합니까?
- 2. SQL에서 Linq-to-Entities 쿼리
- 3. LINQ to SQL은 어떻게 사용합니까?
- 4. 내부 LINQ to SQL에서 작동하지 않음
- 5. LINQ to SQL에서 비트 연산자 만들기?
- 6. SubmitChanges 전에 LINQ-to-SQL에서 가져온 개체
- 7. Linq-to-SQL에서 동시에 여러 테이블 업데이트
- 8. LINQ to SQL에서 SqlException을 catch하는 방법
- 9. Linq-to-SQL에서 뷰를 선택하고 테이블을 업데이트
- 10. bool을 linq-to-SQL에서 true로 반환
- 11. LINQ to SQL에서 새 연결을 인식하지 못합니까?
- 12. Linq-to-SQL에서 SQL Server 기본값을 무시합니다.
- 13. ASP.NET MVC의 LINQ to SQL에서 DuplicateKeyException이 발생합니다.
- 14. LINQ TO SQL에서 여러 열을 어떻게 그룹화합니까?
- 15. Linq to SQL에서 Except handling with orders
- 16. LINQ to SQL에서 JOIN을 사용하여 MIN을 그룹화하십시오.
- 17. linq-to-sql에서 테이블을 복수화하는 이유는 무엇입니까?
- 18. LINQ to Entities는 개체의 인스턴스를 다시 사용합니까?
- 19. C에서 ActiveRecord 패턴을 배우고 싶습니다
- 20. SQL에서 "대화"패턴을 어떻게 탐지합니까?
- 21. LINQ to SQL
- 22. LINQ to XML은 계층 구조 패턴을 사용하여 어디에서나 값을 가져옵니다.
- 23. Linq to SQL - 저장소 패턴을 사용하여 개체를 업데이트하는 방법?
- 24. Linq to Nibernate design
- 25. LINQ to SQL에서 외래 키 관계를 수동으로 설정하는 방법
- 26. LINQ To SQL에서 잘못된 SQL을 생성 할 수 있습니까?
- 27. LINQ to SQL에서 날짜를 설정하지만 시간이 아님 ... 때때로
- 28. LINQ to SQL에서 관계를 기반으로 컬렉션을 생성하지 않는 이유는 무엇입니까?
- 29. DataGridViews 용 LINQ To SQL에서 반환 할 내용
- 30. 런타임시 수정되는 연결 문자열을 LINQ to SQL에서 사용하도록하려면 어떻게합니까?
좋은 질문입니다.이 내용을 명확히하고 26971의 답을 투표 해 주시기 바랍니다. – jfar