Отображение данных Linq: использование свойства Storage для атрибута столбца - PullRequest
4 голосов
/ 04 июня 2011

Может кто-нибудь объяснить, пожалуйста, разницу между следующими 3 вариантами использования ColumnAttribute:

A: атрибут в поле

[Column(Name="ParentId")]
private int m_parentid;
public int ParentId { get { return m_parentid; } set { m_parentid = value; } }

B: атрибут на имущество

private int m_parentid;
[Column(Name="ParentId")]
public int ParentId { get { return m_parentid; } set { m_parentid = value; } }    

C: атрибут для свойства с набором хранилища

private int m_parentid;
[Column(Name="ParentId", Storage="m_parentid")]
public int ParentId { get { return m_parentid; } set { m_parentid = value; } }    

Я могу понять, что B будет отличаться от A и C в случае нетривиального метода получения / установки (Linq предположительно использовал бы метод получения / установки в случае B, но не в случае A или C, верно?

Но я не понимаю, как может быть какая-либо разница между А и С.

Ответы [ 2 ]

3 голосов
/ 04 июня 2011

C полезно, чтобы механизм мог понимать деревья выражений, например предикат:

var items = ctx.SomeTable.Where(x => x.ParentId == 21);

С «a» я бы ожидал, что это не удастся, так как он на самом деле не знает о свойствеParentId (только поле m_parentid и столбец базы данных).Указание «Storage» в «c» позволяет сохранять значение db непосредственно в поле, а не использовать свойство, избегая кода, который не должен быть необходим во время материализации из db.

0 голосов
/ 01 августа 2011

Для случая А я согласен с Марком Гравеллом.

В случае B это так же, как использование личного элемента данных m_ParentId недоступно через открытое свойство ParentID.И это свойство отображается с помощью столбца таблицы parentId.

Случай C выдаст ошибку во время db.getTable(<Class Name>).Потому что вы используете имя и свойства хранилища вместе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...