동적 엔터티 (Microsoft.Xrm.Sdk.Entity, 후기 바인딩 메서드)를 통해 CRM 2011 데이터를 사용하는 서비스를 개발 중입니다. 나는 고의적으로 Xrm.cs 메서드 (초기 바인딩)를 사용하여 내 솔루션을 일반화하지 않았습니다.CRM 2011 Dynamic Entity를 사용하여 레코드 비율 지정
CRM 데이터베이스 (예 : EDMX)에 직접 연결하는 것을 피면 내 솔루션이 호스팅 된 CRM에 사용할 수 없게됩니다 (예 : 직접 DB 액세스가없는 경우).
나는 정말 선택 기준과 사투를 벌인거야, 다음 (간체) 요구 사항이 :
임의 7 % 필요 기록이 선택 될 (업데이트).
SQL에서는 선택 기준이 상대적으로 쉽습니다. 레코드의 임의 비율을 선택하는 방법을 알고 있습니다. 예 :
SELECT TOP 7 PERCENT * FROM
(
SELECT TOP 1000 NEWID() AS Foo, [someColumns]
FROM [someTable]
)
AS Bar ORDER BY Bar.Foo ASC
이것은 완벽하게 작동합니다. 내가 CRM 2011 동적 엔티티 LINQ를 사용하는 방법을 알고하지 않는 문제가 있지만있다
from e in someEntities
orderby Guid.NewGuid()
select e;
- 대신 그들은 몇 가지 제한 QueryExpression 클래스/구문을 사용하여 주장 : 뭔가처럼 LINQ에 해당이 수집 , 또는 fetchXML을 사용합니다 (this page (MSDN) 참조).
나는이 요구 사항을 충족하기위한 다음과 같은 옵션을 확인했습니다
은 단순히 인덱스에 의해 임의 선택을 선택 목록으로 설정 전체 기록을 반환, 동적 엔티티를 사용. 그러나 이것은 인터넷 데이터 서비스를 통해 최대 10,000 개의 레코드를 반환하는 것을 포함하는데 이는 느리거나 불안정 할 수 있습니다.
fetchXML 문을 사용하십시오. 불행히도 나는 fetchXML을 모른다. 따라서 COUNT, TOP, PERCENT 또는 NEWID()와 같은 일을 할 수 있는지는 알 수 없다.
Xrm.cs 및 LINQ를 사용하거나 저장 프로 시저 또는 SQL보기를 사용하십시오. 이러한 모든 옵션은 솔루션을 직접적인 데이터베이스 연결 및/또는 초기 바인딩으로 묶는 것을 의미합니다. 이는 바람직하지 않습니다.
고객에게 말하십시오.
모든 조언을 주시면 감사하겠습니다. fetchXML이이 쿼리를 수행 할 수 있습니까? 이 작업을 수행하는 더 좋은 방법이 있습니까?
저는 요구 사항 작성자가 솔루션이 호스트 된 환경에 적용 가능해야한다는 점을 강조합니다. 따라서 ID 목록을 반환하고 해당 항목을 무작위로 추출해 보겠습니다. 나는이 방법이 성공적으로 입증되면 업적으로 표시하고 답변으로 표시합니다. 고마워 :) – Alec
나는 위에서 설명한 방법을 사용하여이 작업을 할 수 있었다. 전체 집합을 ids의 목록으로 반환 한 다음 임의적 인 메모리 내 선택을 수행 한 후 전체 데이터를 선택합니다. 그래서 나는 이것을 답으로 쓰겠습니다. 그러나 비슷한 요구 사항을 가진 사람이라면 jamnap의 답을 읽어야합니다. 나는 어느 솔루션이 더 효율적인 지 아직 모른다. – Alec