В Entity Framework я могу применить атрибут NotMapped
к свойству, которое я НЕ хочу создавать столбец в таблице базы данных. Как получить тот же эффект для автоматически сгенерированных классов в файле DBML?
У меня есть StoredProcedure
, который возвращает некоторые дополнительные поля.
Я назвал SP
следующим:
[global::System.Data.Linq.Mapping.FunctionAttribute(Name = "dbo.sp_GetSupplierArticles")]
public ISingleResult<SupplierArticle> GetSupplierArticles([global::System.Data.Linq.Mapping.ParameterAttribute(DbType = "BigInt")] long mainArticleId, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType = "BigInt")] long? userId)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), mainArticleId, userId);
return ((ISingleResult<SupplierArticle>)(result.ReturnValue));
}
Необходимое поле, которое я добавил в отдельный частичный класс. Без каких-либо дополнительных атрибутов он возвращает значение по умолчанию для my и применяется [Column(IsDbGenerated = false)]
в разделенном частичном классе:
public partial class SupplierArticle
{
[Column(IsDbGenerated = false)]
public double Extra { get; set; }
}
Итак, он работает, пока я не попытаюсь получить SupplierArticle
с помощью другого запроса (а не моей хранимой процедуры):
db.LoadOptions = db.GenerateDataLoadOptions(entitiesToInclude);
var query =
from shoppingCartItem in db.ShoppingCartItems
where shoppingCartItem.UserId == userId
select shoppingCartItem;
return query.ToList();
Моя сущность загружается из-за LoadOptions
(передается в параметре entitiesToInclude
).
В этом запросе и в другом, которые пытаются загрузить "плохой" объект со свойствами, определенными в файле .dbml, я получаю исключение:
Недопустимое имя столбца "Экстра" и одно и то же сообщение для каждого дополнительного свойства.
Каков правильный способ расширения объекта или как избежать этого исключения?
UPD:
Если я удалю все атрибуты, исключение больше не произойдет. Но добавленные свойства не инициализируются, когда SP
возвращает результат.