나는 저녁 이래로이 문제에 봉착했습니다. 내 응용 프로그램에 SQLite
데이터베이스가 있습니다. 파일에서 SQLite DB를 만들었습니다. ERD를 다이어그램은 아래와 같습니다 SQLite - LINQ를 사용하여 데이터를 가져 오는 중
그리고 지금 내 응용 프로그램에서 나는 데이터베이스에 대한 연결 작성 :
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; }
}
: 내 DB에 테이블을 나타내는 클래스를 생성 한
using (var conn = new SQLiteConnection(DB_PATH))
{
// retrieving statemets...
}
을
당신이 볼 수 있듯이 kursy
테이블에는 두 개의 외래 키 - id_kantory
과 id_waluty
이 있습니다.
이제 매우 궁금하고 이상한 일이 발생합니다. 내가 INNER JOIN
문 정상적인 SQL의 statemets를 사용하여 일부 정보를 검색 할 때 - 그것을 잘가! :
using (var conn = new SQLiteConnection(DB_PATH))
{
var query = new SQLiteCommand(conn);
query.CommandText = "SELECT * FROM Kursy INNER JOIN Kantory ON Kursy.id_kursy=Kantory.id_kantory WHERE Kantory.id_kantory = 1";
var result = query.ExecuteQuery<Kursy>();
}
이 코드는 잘 작동 작동합니다! 하지만 내가하려고 할 때 다음과 같은 LINQ를 사용하여 내 클래스를 사용합니다 :
using (var conn = new SQLiteConnection(DB_PATH))
{
var result = conn.Table<Kursy>().Where(k => k.kantory.id_kantory == 1).FirstOrDefault();
}
그것은 나에게 NotSupportedException이를 던졌습니다! 님에게 메일입니다 회원 액세스 표현을
를 컴파일하는 데 실패하지만 가입없이 LINQ 를 사용하여 내 클래스를 사용할 때 다른 클래스가! : 작동 그래서 결국
using (var conn = new SQLiteConnection(DB_PATH))
{
var result = conn.Table<Kursy>().Where(k => k.id_kursy == 1).FirstOrDefault();
}
: 내 문제가 그 LINQ 쿼리을 사용하여 더 많은 하나의 테이블에 가입 할 수 없습니다. 클래스에서이 모델이 잘못된 것 같지만 실제로 이유를 모르겠습니다 ...
PS. 이것은 Windows Phone 8.1 응용 프로그램이므로 Entity Framework를 사용할 수 없습니다.
Sqlite-net은 외래 키를 지원하지 않습니다. – ErikEJ
@ErikEJ, 음, 위와 같이 SELECT ... FROM ... INNER JOIN ...을 사용하여 일반적인 SQL 문을 사용하면 작동합니다. 아마 외래 키를 사용하는 것 아닌가요? – XardasLord
LINQ에서 SQL 로의 조인을 변환하지 않는다 – ErikEJ