Khung thực thể - Kiểu dữ liệu không gian
Hỗ trợ kiểu không gian đã được giới thiệu trong Entity Framework 5. Một tập hợp các toán tử cũng được bao gồm để cho phép các truy vấn phân tích dữ liệu không gian. Ví dụ: một truy vấn có thể lọc dựa trên khoảng cách giữa hai vị trí địa lý.
Entity Framework sẽ cho phép các kiểu dữ liệu không gian mới được hiển thị dưới dạng thuộc tính trên các lớp của bạn và ánh xạ chúng tới các cột không gian trong cơ sở dữ liệu của bạn.
Bạn cũng sẽ có thể viết các truy vấn LINQ sử dụng các toán tử không gian để lọc, sắp xếp và nhóm dựa trên các phép tính không gian được thực hiện trong cơ sở dữ liệu.
Có hai kiểu dữ liệu không gian chính:
Kiểu dữ liệu địa lý lưu trữ dữ liệu hình elip, ví dụ: vĩ độ và kinh độ GPS.
Kiểu dữ liệu hình học đại diện cho hệ tọa độ Euclid (phẳng).
Chúng ta hãy xem xét ví dụ sau về sân Cricket.
Step 1 - Tạo dự án mới từ tùy chọn menu File → New → Project.
Step 2 - Trong ngăn bên trái, chọn Ứng dụng bảng điều khiển.
Step 3 - Nhấp chuột phải vào tên dự án và chọn Quản lý gói NuGet…
Step 4 - Cài đặt Entity Framework.
Step 5 - Thêm tham chiếu đến hợp ngữ System.Data.Entity và cũng thêm câu lệnh sử dụng System.Data.Spatial cho các kiểu dữ liệu không gian.
Step 6 - Thêm lớp sau vào tệp Program.cs.
public class CricketGround {
public int ID { get; set; }
public string Name { get; set; }
public DbGeography Location { get; set; }
}
Step 7 - Ngoài việc xác định các thực thể, bạn cần xác định một lớp dẫn xuất từ DbContext và hiển thị các thuộc tính DbSet <TEntity>.
Trong Program.cs thêm định nghĩa ngữ cảnh.
public partial class CricketGroundContext : DbContext {
public DbSet<CricketGround> CricketGrounds { get; set; }
}
Step 8 - Thêm mã sau vào chức năng Chính, sẽ thêm hai đối tượng CricketGround mới vào ngữ cảnh.
class Program {
static void Main(string[] args) {
using (var context = new CricketGroundContext()) {
context.CricketGrounds.Add(new CricketGround() {
Name = "Shalimar Cricket Ground",
Location = DbGeography.FromText("POINT(-122.336106 47.605049)"),
});
context.CricketGrounds.Add(new CricketGround() {
Name = "Marghazar Stadium", Location = DbGeography
.FromText("POINT(-122.335197 47.646711)"),
});
context.SaveChanges();
var myLocation = DbGeography.FromText("POINT(-122.296623 47.640405)");
var cricketGround = (from cg in context.CricketGrounds
orderby cg.Location.Distance(myLocation) select cg).FirstOrDefault();
Console.WriteLine("The closest Cricket Ground to you is: {0}.", cricketGround.Name);
}
}
}
Các thuộc tính không gian được khởi tạo bằng cách sử dụng phương thức DbGeography.FromText. Điểm địa lý được biểu diễn dưới dạng WellKnownText được chuyển tới phương thức và sau đó lưu dữ liệu. Sau đó đối tượng CricketGround sẽ được truy xuất nơi vị trí của nó gần vị trí được chỉ định nhất.
Khi đoạn mã trên được thực thi, bạn sẽ nhận được kết quả sau:
The closest Cricket Ground to you is: Marghazar Stadium
Chúng tôi khuyên bạn nên thực hiện ví dụ trên theo cách từng bước để hiểu rõ hơn.