문제

LINQTOSQL의 VS2010 릴리스 또는 EntityFramework v4가 SQL 2008 공간 데이터 유형에 대한 쿼리를 지원할지 여부를 아는 사람이 있습니까?

도움이 되었습니까?

해결책

EF 4.0에서는 조합을 사용하여 함께 무언가를 해킹 할 수 있습니다. 사용자 정의 기능 그리고 공간 유형 척은 실제로 이진 유형입니다. 이것은 제가 주변에 멍청하고 시도하고 추가 할 생각입니다. 내 팁 시리즈. 그러나 아직 해킹조차도 입증되지 않았습니다. :(

그리고 직접 지원과 관련하여 불행히도 L2S 또는 EF V4는 VS2010 기간 동안 공간 유형을 지원하지 않습니다.

알렉스 제임스

엔티티 프레임 워크 프로그램 관리자.

다른 팁

Entity Framework / LINQ에서 엔티티에서 작동하는 해결 방법은 다음과 같습니다.

데이터베이스보기를 사용하여 잘 알려진 텍스트 (쿼리에서 "geometry.toString ()"또는 바이너리를 반환 할 수 있습니다. 그런 다음 결과 행이 반환되면 문자열/바이너리를 .net의 sqlgeometry 객체로 변환하십시오.

다음은 지오메트리 유형의 "위치"필드를 잘 알려진 텍스트 문자열로 변환하는 뷰를 작성하는 데 사용되는 샘플 쿼리입니다.

SELECT ID, Name, Location.ToString() as Location FROM MyTable

다음은 "지리"객체의 잘 알려진 텍스트 또는 문자열 표현이 포함 된 "위치"필드가있는 결과 엔티티를 쿼리하는 예입니다.

var e = new MyApp.Data.MyDataEntities(connectionString);
var items = from i in e.MyTables
            select i;

foreach (var i in items)
{
    // "Location" is the geography field
    var l = SqlGeography.Parse(i.Location);
    var lat = l.Lat;
    var lng = l.Long;
}

한 가지 추가 사항은 LINQ를 사용하여 자신의 공간 쿼리를 수행하기 위해 테이블의 모든 데이터를 .NET으로 가져 오지 않기 때문에 저장 프로 시저 내에서 공간 기반 쿼리를 수행해야한다는 것입니다.

이것은 기본적으로 SQL 공간 유형을 지원하는 것만 큼 우아하지는 않지만 엔티티 프레임 워크와 SQL 공간을 동시에 실행할 수 있습니다.

손으로 쓴 테이블과 열로 Linq-to-SQL을 확실히 수행하고 SQL 공간 유형을 직접 얻을 수 있습니다. 샘플 DB에서 다음을 테스트했습니다 (system.sqlserver.types에 참조 및 '사용'을 포함하는 것을 잊지 마십시오.

...

string connectionString = @"Data Source=YADDAYADDA;Initial Catalog=MUMBLEMUMBLE;Integrated Security=True";
var pointsFileDc = new PointsFileDC(connectionString);
var geos = (from point in pointsFileDc.pointsData
            select point).Take(10);
foreach (var geo in geos)
{
    ObjectDumper.Write(geo);
}

...

public class PointsFileDC : DataContext
{
    public Table<GeoPoints> pointsData;
    public PointsFileDC(string connection)
        : base(connection)
    {
    }
}

[Table(Name = "Points")]
public class GeoPoints
{
    [Column(IsPrimaryKey = true)]
    public int PointId;
    [Column]
    public SqlGeography GeoPoint;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top