Community.CsharpSqlite.SQLiteClient는 추상클래스 System.Data.Common.DbConnection를 구현하고 있기 때문에 쉽게 LINQ사용이 가능할 것이라고 생각했다.
아래와 같은 테이블에
CREATE TABLE IF NOT EXISTS [MFPUserMap] (
[MapID] INTEGER PRIMARY KEY AUTOINCREMENT,
[MFPIP] varchar(50) NOT NULL,
[UserName] nvarchar(50) NOT NULL,
[MFPUserID] int NOT NULL,
[CreatedDate] datetime DEFAULT (datetime('now','localtime'))
);
아래와 같은 컨텍스를 구현하는 클래스를 만들고
public partial class MyDB : DataContext
{
public Table<MFPUserMap> MFPUserMaps;
public MyDB(IDbConnection connection) : base(connection) { }
}
[Table(Name = "MFPUserMap")]
public class MFPUserMap
{
[Column(IsPrimaryKey = true, IsDbGenerated = true, CanBeNull = false)]
public int MapID;
[Column(CanBeNull = false)]
public string MFPIP;
[Column(CanBeNull = false)]
public string UserName;
[Column(CanBeNull = false)]
public int MFPUserID;
[Column]
public string CreatedDate;
}
사용하는 LINQ는
public int GetUserIDFromMfpUserMap(string mfpIP, string userName)
{
using (DbConnection con = new SqliteConnection(_connectionStr))
{
con.Open();
using (MyAuthDB db = new MyAuthDB(con))
{
var query =
from m in db.MFPUserMaps
where m.MFPIP == mfpIP
where m.UserName == userName
select m.MFPUserID;
int cnt = query.Count();
if (cnt > 0)
{
return query.First();
}
else
{
return 10;
}
}
}
}
와 같았다. 그런데
Community.CsharpSqlite.SQLiteClient.SqliteSyntaxException : near ".": syntax error
예외가 발생하였다.
쿼리를 확인하다 보니, TOP 1 과 같은 쿼리가 있음을 발견했다.
(dataContext.Log = Console.Out 으로 로그를 출력 스트림에 연결 할 수 있다.)
SELECT TOP (1) [t0].[MFPUserID]
FROM [MFPUserMap] AS [t0]
WHERE ([t0].[UserName] = @p0) AND ([t0].[MFPIP] = @p1)
SQLite는 top n 대신 limit n이라는 키워드를 사용한다.
LINQ가 만능은 아닌 것이다.
참고사항
A LINQ Tutorial: Mapping Tables to Objects - CodeProject
How to: Connect to a Database (LINQ to SQL) - MSDN
DataContext Constructor - MSDN
Table<TEntity> Class - MSDN
'Programing > 닷넷' 카테고리의 다른 글
자주쓰는 LINQ 정리 (0) | 2012.12.20 |
---|---|
ADO.NET 데이터 프로바이더들(Data Providers) (0) | 2012.12.19 |
Community.CsharpSqlite 사용하기 (0) | 2012.12.12 |
.NET DLL 이나 어셈블리(assembly)에서 public key 구하기 (0) | 2012.12.11 |
Microsoft SQL Server Compact (0) | 2012.12.11 |