Бага ассоциативных полей
От: shakilcfg  
Дата: 26.10.12 15:50
Оценка:
Добрый день.
Столкнулся с такой проблемой:

// Модель данных

    [TableName(Name = "ATable")]
    public class ATable {
      public Guid Id;
      public int SomeField;
    }

    [TableName(Name = "BTable")]
    public class BTable {
      public Guid Id;
      public Guid Id_ATable;

      [Association(ThisKey = "Id_ATable", OtherKey = "Id", CanBeNull = true)]
      public ATable ATable_Entry {
        get {
          using(var db = OpenConnect) {
            return db.GetTable<ATable>().FirstOrDefault(_ => _.Id == Id_ATable);
          }
        }
      }
    }

// Запрос
          db.GetTable<BTable>()
            .Select(_ => new BTable() { Id = _.Id, Id_ATable = _.Id_ATable })
            .Where(_ => _.ATable_Entry.SomeField > 0)
            .ToArray();


При выполнении запроса подымается исключение:
"Invalid member '... BTable.ATable_Entry' "

Solution проекта и скрипт БД
Re: Бага ассоциативных полей
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 04.11.12 14:12
Оценка:
Здравствуйте, shakilcfg, Вы писали:

S>Столкнулся с такой проблемой:


Вместо всего этого:

S> [Association(ThisKey = "Id_ATable", OtherKey = "Id", CanBeNull = true)]

S> public ATable ATable_Entry {
S> get {
S> using(var db = OpenConnect) {
S> return db.GetTable<ATable>().FirstOrDefault(_ => _.Id == Id_ATable);
S> }
S> }
S> }

Пишешь просто:
[Association(ThisKey = "Id_ATable", OtherKey = "Id", CanBeNull = true)]
public ATable ATable_Entry { get; set; }
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[2]: Бага ассоциативных полей
От: shakilcfg  
Дата: 06.11.12 09:49
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Пишешь просто:

AVK>[Association(ThisKey = "Id_ATable", OtherKey = "Id", CanBeNull = true)]
AVK>public ATable ATable_Entry { get; set; }

К сожалению это не помогло. Просмотрев исходники, предполагаю, что после узла new, ассоциативные поля просто не видны дочерним веткам в дереве выражений, иными словами, они не учитываются как допустимые.
Re[3]: Бага ассоциативных полей
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 06.11.12 12:09
Оценка:
Здравствуйте, shakilcfg, Вы писали:

S>К сожалению это не помогло.


А должно.

S> Просмотрев исходники, предполагаю, что после узла new, ассоциативные поля просто не видны дочерним веткам в дереве выражений, иными словами, они не учитываются как допустимые.


Теория неверная. А зачем вообще new? Ты либо анонимный тип конструируй, либо оставляй просто BTable, который тебе GetTable возвращает.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[4]: Бага ассоциативных полей
От: shakilcfg  
Дата: 06.11.12 12:46
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, shakilcfg, Вы писали:


S>>К сожалению это не помогло.


AVK>А должно.


S>> Просмотрев исходники, предполагаю, что после узла new, ассоциативные поля просто не видны дочерним веткам в дереве выражений, иными словами, они не учитываются как допустимые.


AVK>Теория неверная. А зачем вообще new? Ты либо анонимный тип конструируй, либо оставляй просто BTable, который тебе GetTable возвращает.



Это упрощенный запрос, только для анализа ошибки. В реальности я не могу переставить new и where.
Re[5]: Бага ассоциативных полей
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 06.11.12 13:10
Оценка:
Здравствуйте, shakilcfg, Вы писали:

S>Это упрощенный запрос, только для анализа ошибки. В реальности я не могу переставить new и where.


Пользуйся анонимными типами, с ними точно все работает.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re[6]: Бага ассоциативных полей
От: shakilcfg  
Дата: 06.11.12 13:42
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, shakilcfg, Вы писали:


S>>Это упрощенный запрос, только для анализа ошибки. В реальности я не могу переставить new и where.


AVK>Пользуйся анонимными типами, с ними точно все работает.


Верно, так как у них не может быть ассоциативных полей, и затем можно join'ить с другой таблицей. Но разве ассоциации не предлагают более лаконичный вариант?
Спасибо за отклик. Я лишь хотел указать проблемное место.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.