2009-12-14 45 views
5

Im để thiết kế Truy cập dữ liệu của tôi cho giải pháp mới mà tôi tạo. Giải pháp đó mặc dù có Compact Framework Device Application và các thư viện ngoài Desktop. Tất cả .NET 3.5. Máy tính để bàn sẽ xử lý tất cả các truy cập dữ liệu về cơ bản. Tôi cần các đối tượng dữ liệu để có trong CF quá, Desktop sẽ giao tiếp với SQL và sau đó với điện thoại di động và cung cấp cho các dữ liệu thích hợp ...LINQ to SQL trong Compact Framework

Tôi yêu LINQ, và nhiều hơn nữa tôi yêu LINQ 2 SQL. Có rất nhiều hype ra khỏi đó và tôi không mua nội bộ Microsoft chính trị về giới thiệu EF. Hiện tại EF quá nặng và quá phức tạp để ai đó lựa chọn nó bên cạnh nó vẫn đang phát triển và EF 4 sẽ có những thay đổi lớn khi nó xuất hiện trong vài tháng tới. Nhưng tôi không thể chờ đợi nhiều tháng để tạo ra một dự án như mọi nhà phát triển ở đây, tôi muốn một cái gì đó ngay bây giờ! Sau đó nói rằng tôi muốn sử dụng LINQ 2 SQL, vấn đề của tôi là tôi không thể chỉ sao chép dbml được tạo ra và sử dụng các lớp được tạo ra. Tôi không cần các nguyên nhân DataContext tôi không có ý định sử dụng CRUD hoặc bất kỳ hoạt động trên một cơ sở dữ liệu với các ứng dụng di động. Tôi chỉ muốn các đối tượng. Có ai từng đến trong tình huống như thế này không? Toàn bộ vấn đề không phải là viết tất cả các lớp biểu diễn các bảng bằng tay. Nguyên nhân tôi cần chúng để tiếp tục thao tác LINQ to Objects.

Về cơ bản một ORM hỗ trợ CF sẽ thực hiện công việc! Nhưng tôi không biết bất kỳ sự không tương thích nào tôi sẽ gặp.

Trả lời

2

L2S hoạt động tốt với khung nhỏ gọn. Tuy nhiên, bạn không thể sử dụng trình thiết kế kéo và thả. Bạn sẽ cần phải chạy SQLMetal.exe để tạo các lớp cho bạn.

SQLMetal.exe: http://msdn.microsoft.com/en-us/library/bb386987.aspx

Ví dụ với Northwind compact: http://blogs.msdn.com/sqlservercompact/archive/2007/08/21/linq-with-sql-server-compact-a-ka-dlinq-over-sql-ce.aspx

Một ví dụ khác, với rất nhiều hình ảnh: http://pietschsoft.com/post/2009/01/Using-LINQ-to-SQL-with-SQL-Server-Compact-Edition.aspx

+0

Tôi không cần sử dụng một cơ sở dữ liệu SQL CE trên App Desktop của tôi, tôi chỉ cần để tạo ra các lớp từ Bảng, dường như rằng tôi sẽ làm điều này bằng tay .... –

+0

Bạn có thể chạy SQLMetal để có được các đối tượng từ kho dữ liệu, sau đó chỉnh sửa tệp * .cs được tạo. –

+0

Đó là một tùy chọn. Nên thay đổi tất cả EntitySet và EntityRef thành Generic Collections mà tôi đoán. –

0

Bạn có thể sử dụng DevExpress đối tượng liên tục (XPO) trên khung nhỏ gọn. Tôi đã sử dụng nó trước đây nhưng thấy nó hơi chậm cho mục đích của tôi (ứng dụng thu thập dữ liệu).

Lý do bạn không thể tìm thấy phần lớn điều này trên khung nhỏ gọn là tốc độ thường rất quan trọng đối với các ứng dụng thiết bị, mã truy cập dữ liệu thường được thực hiện thủ công.

Tôi không biết bạn có thể tạo đối tượng từ cơ sở dữ liệu đã tồn tại với XPO hay không.

+0

Cảm ơn bạn đã đề xuất. –

3

tôi đã có thể sửa đổi SubSonic 3.0, các db4o cổng/Mainsoft của System.Linq.Expressions từ dự án Mono sau khi thêm thiếu Queryable nguồn khác nhau, và Matt Warren của IQToolkit trên CodePlex để cung cấp một tương đương L2S ​​trên CF.

Đây là những gì cần thiết, tuy nhiên, vì cây biểu thức LINQ không được hỗ trợ trên .Net CF 3.5.

Tôi đã có thể sử dụng DbEntityProvider/DbEntitySession và AttributeMapping/XMLMapping được nhập vào Subsonic từ IQToolkit để cung cấp hỗ trợ lập bản đồ nhóm và lớp tốt hơn.

+0

Tôi nghĩ rằng điều này sẽ hỗ trợ sao chép các đối tượng được tạo ra từ tệp dbml nhưng tôi không có loại kiến ​​thức này. Điều gì về System.Data.Linq? Trong đó có EntitySet <> EntityRef <> Kiểu dữ liệu nhị phân và tất cả các thuộc tính mà tôi nghĩ. Nếu tôi có thể hỗ trợ những tôi nghĩ rằng tôi sẽ không phải viết các đối tượng kinh doanh bằng tay cho các thiết bị. Rất tốt đăng bài mặc dù. –

0

Đây là một tùy chọn tốt tạo ra từ các tệp POCO thuần túy của tệp dbML làm việc với LINQ 2 SQL. Chưa được thử nghiệm nhưng có vẻ như đã hứa.

http://www.codeplex.com/ULinqGen