Tôi bị kẹt với vấn đề này kể từ vài buổi tối. Tôi có cơ sở dữ liệu SQLite
trong đơn đăng ký của mình. Tôi đã tạo ra rằng SQLite DB từ một tập tin. Sơ đồ ERD được hiển thị dưới đây: SQLite - truy xuất dữ liệu bằng LINQ
Và bây giờ trong ứng dụng của tôi, tôi tạo ra một kết nối đến cơ sở dữ liệu của tôi:
using (var conn = new SQLiteConnection(DB_PATH))
{
// retrieving statemets...
}
Tôi đã tạo ra các lớp học mà đại diện cho bảng trong DB của tôi:
public class Kantory
{
public Kantory()
{
this.kursy = new HashSet<Kursy>();
}
[SQLite.PrimaryKey, SQLite.AutoIncrement]
public int id_kantory { get; set; }
public string nazwa { get; set; }
public virtual ICollection<Kursy> kursy { get; set; }
}
public class Waluty
{
public Waluty()
{
this.kursy = new HashSet<Kursy>();
}
[SQLite.PrimaryKey, SQLite.AutoIncrement]
public int id_waluty { get; set; }
public string nazwa { get; set; }
public virtual ICollection<Kursy> kursy { get; set; }
}
public class Kursy
{
[SQLite.PrimaryKey, SQLite.AutoIncrement]
public int id_kursy { get; set; }
public int id_kantory { get; set; }
public int id_waluty { get; set; }
public decimal kurs { get; set; }
public System.DateTime data { get; set; }
public int aktualne { get; set; }
public virtual Kantory kantory { get; set; }
public virtual Waluty waluty { get; set; }
}
Như bạn thấy, trong bảng kursy
Tôi có hai phím ngoài - id_kantory
và id_waluty
.
Và bây giờ điều kỳ lạ và kỳ lạ xảy ra. Khi tôi cố truy xuất một số thông tin bằng cách sử dụng các biểu thức SQL bình thường với câu lệnh INNER JOIN
- nó hoạt động tốt !:
Mã này hoạt động tốt! NHƯNG khi tôi cố gắng sử dụng các lớp học của tôi sử dụng LINQ như thế này:
using (var conn = new SQLiteConnection(DB_PATH))
{
var result = conn.Table<Kursy>().Where(k => k.kantory.id_kantory == 1).FirstOrDefault();
}
Nó ném cho tôi một NotSupportedException! Các Thông tin về là: truy cập thành viên thất bại trong việc biên dịch biểu
NHƯNG khi tôi sử dụng các lớp học của tôi sử dụng LINQ KHÔNG THAM GIA lớp khác nó hoạt động !:
using (var conn = new SQLiteConnection(DB_PATH))
{
var result = conn.Table<Kursy>().Where(k => k.id_kursy == 1).FirstOrDefault();
}
Vì vậy, cuối cùng: vấn đề của tôi là Tôi không thể tham gia nhiều hơn một bảng bằng truy vấn LINQ. Dường như mô hình này trong lớp học là sai nhưng tôi thực sự không biết tại sao ...
PS. Đây là ứng dụng Windows Phone 8.1, vì vậy tôi không thể sử dụng Entity Framework cho điều đó.
Sqlite-net không hỗ trợ khóa ngoài – ErikEJ
@ErikEJ, hmm nhưng khi tôi sử dụng câu lệnh SQL bình thường như được hiển thị ở trên bằng cách sử dụng 'SELECT ... FROM ... INNER JOIN ...' nó hoạt động. Vì vậy, nó có thể sử dụng các phím nước ngoài, phải không? – XardasLord
Nó không dịch các phép nối từ LINQ sang SQL – ErikEJ