سؤال

هل يعرف أحد (من الناحية المثالية، مع مرجع)، سواء كان إصدار VS2010 من LinqtosQL أو EntityFrameWork V4 سيدعم الاستعلامات عبر أنواع البيانات المكانية SQL 2008؟

هل كانت مفيدة؟

المحلول

في EF 4.0، قد تكون قادرا على اختراق شيء معا باستخدام مزيج من وظائف مخصصة والتظاهر بأنواع المكانية هي أنواع ثنائية حقا. هذا شيء أفكر في الهروم حوله واحتجازه وإضافته إليه سلسلة نصائح بلدي. وبعد ولكن حتى الآن حتى الاختراق غير مثبت. :(

وفيما يتعلق بالدعم المباشر، لسوء الحظ، لن يدعم L2s أو EF V4 الأنواع المكانية في الإطار الزمني VS2010.

أليكس جيمس

مدير برنامج إطار الكيان.

نصائح أخرى

إليك حلولة لاستخدامها في إطار عمل الكيان / LINQ إلى الكيانات:

يمكنك استخدام عرض قاعدة بيانات للعودة النص المعروف (باستخدام "Geometry.toString ()" في الاستعلام) أو ثنائي. ثم بمجرد إرجاع الصفوف الناتجة، فقط قم بتحويل السلسلة / الثنائية إلى كائن SQLGeometry في .NET.

إليك استعلام نموذج يستخدم لبناء طريقة عرض يحول حقل "موقع" لنوع الهندسة إلى سلسلة نصية معروفة:

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;
}

أي شيء إضافي واحد، ستحتاج إلى القيام بأي استعلامات مكانية داخل الإجراءات المخزنة، لأنك لا ترغب في سحب جميع البيانات من الجدول إلى .NET من أجل تنفيذ الاستعلام المكاني الخاص بك باستخدام LinQ.

ليس هذا أنيقا يدعم أن أنواع 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