私は単純なクラスを持っています:
public class User : ActiveRecordLinqBase<User>
{
[PrimaryKey(Column = "user_id", Length = 20)]
public string Id { get; set; }
[Property(Column = "password", Length = 16)]
public string Password { get; set; }
...
}
そして、次のリポジトリを作成しました。
public class SqlRepository<T> : IRepository<T> where T : ActiveRecordLinqBase<T>, new() {
public void Add(T entity) {
entity.SaveAndFlush();
}
public void Remove(T entity) {
entity.DeleteAndFlush();
}
public void Modify(T entity) {
entity.UpdateAndFlush(); ;
}
...
public IEnumerable<T> FindAll(Func<T, bool> predicate) {
return ActiveRecordLinqBase<T>.Queryable.Where(predicate);
}
}
ここで、次の単体テストを実行すると (MySQL データベースに対して):
[Test]
public void Test_Sample() {
var repo = new SqlRepository<T>();
repo.Add("john.doe", "keyword1");
repo.Add("other.user", "keyword2");
var users = repo.FindAll(x => x.Username.Contains("john")).ToList();
Assert.AreEqual(1, users.Count);
}
... 次の SQL クエリを取得します。
this_.user_id を user1_0_0_ として、this_.password を password0_0_ として、this_.role を role0_0_ として選択 FROM users this_
WHERE
条項はどこですか?
代わりに、同じテストで次のことを直接行うと...
var users = User.Queryable.Where(x => x.Username.Contains("john"));
次のSQLを取得します。
this_.user_id を user1_0_0_ として、this_.password を password0_0_ として、this_.role を role0_0_ として選択 FROM users this_ WHERE this_.user_id like ?p0;?p0 = '%john%'
私は何か間違ったことをしていますか?
これら2つのクエリの違いは何ですか?
編集:私も試しました
return ActiveRecordLinq.AsQueryable<T>().Where(predicate);
成功せずに。