Деревья в базе
От: Alexus_256  
Дата: 10.03.11 09:39
Оценка:
Вот ещё такой тест:

        [MapField("DbId", "Id")]
        [MapField("DbParentid", "Parent.Id")]
        public class TreeNode
        {
            public Int32 Id { get; set; }
            public TreeNode Parent { get; set; }
        }

        [Test(Description = "BLT BUG")]
        public void TreeIssueTest()
        {
            using (var db = new DbManager())
            {
                var q1 = db.GetTable<TreeNode>();
                var q = q1.Where(_ => _.Parent.Id == 5);

                var sql = ((Table<TreeNode>)q).SqlText;
                Assert.IsNotEmpty(sql);

                var wherePos = sql.IndexOf("WHERE");
                Assert.AreNotEqual(-1, sql.IndexOf("DbParentid", wherePos));
                
            }
        }


Выборка из базы идёт здесь не по DbParentid, а по DbId.

Покопавшись, мы решили проблему, навесив атрибут на св-во Parent:
[Association(OtherKey = "Id", ThisKey = "Parent.Id", CanBeNull = false)]


В случае, когда атрибут MapField для Parent.Id задан явно, я считаю такую генерацию запросов неожиданным поведением.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.