Может быть, кто-то может помочь.
Я хочу иметь на карте Linq-Class другой тип данных.
Это работает:
private System.Nullable<short> _deleted = 1;
[Column(Storage = "_deleted", Name = "deleted", DbType = "SmallInt", CanBeNull = true)]
public System.Nullable<short> deleted
{
get
{
return this._deleted;
}
set
{
this._deleted = value;
}
}
Конечно. Но нет, когда я хочу разместить некоторую логику для логического типа, например:
private System.Nullable<short> _deleted = 1;
[Column(Storage = "_deleted", Name = "deleted", DbType = "SmallInt", CanBeNull = true)]
public bool deleted
{
get
{
if (this._deleted == 1)
{
return true;
}
return false;
}
set
{
if(value == true)
{
this._deleted = (short)1;
}else
{
this._deleted = (short)0;
}
}
}
Я всегда получаю ошибку времени выполнения:
[TypeLoadException: GenericArguments[2], "System.Nullable`1[System.Int16]", on 'System.Data.Linq.Mapping.PropertyAccessor+Accessor`3[T,V,V2]' violates the constraint of type parameter 'V2'.]
Я не могу изменить базу данных на битовую. Мне нужно преобразовать класс отображения.
** Обновление
Согласно mmcteam, приведение в не нанесенном на карту методе делает свое дело.
Не уверен, стоит ли так использовать OR OR, но это работает.
private System.Nullable<short> _deleted = 1;
public bool deleted
{
get
{
if (this._deleted == 0)
{
return false;
}
else
{
return true;
}
}
set
{
if (value)
{
this._deleted = 1;
}
else
{
this._deleted = 0;
}
}
}
[Column(Storage = "_deleted", Name = "deleted", DbType = "SmallInt", CanBeNull = true)]
private short? deleted_smallint
{
get
{
return this._deleted;
}
set
{
this._deleted = value;
}
}
** УВЕДОМЛЕНИЕ / ПРОБЛЕМА
Вы не можете использовать не отображенные методы в запросах linq!
var result = from p in dc.Products
where p.enabled && !p.deleted
select p;
вызывает не поддерживаемое исключение sql. Без условия where данные получаются с правильными значениями.