我正在开发一个Windows应用程序。我有一个模型类型的实体模型从数据库生成。我首先导入了一些存储过程,对于一个SP,我已经更改了将数据类型从bool替换为int的上下文。现在,当我尝试更新模型(添加SP)时,已更改的SP的上下文恢复为其默认类型,即bool导致错误(函数具有无效参数)。
这是模型的Context.cs。这里当我将类型从bool更改为int时,应用程序工作正常,但是当我更新模型时,类型又回到bool及其抛出错误。怎么避免这个?
public virtual ObjectResult<Web_get_obj_details_Result> Web_get_obj_details(Nullable<byte> hcode, Nullable<byte> vcode, Nullable<byte> yearcode, Nullable<short> tranno)
{
var hcodeParameter = hcode.HasValue ?
new ObjectParameter("hcode", hcode) :
new ObjectParameter("hcode", typeof(byte));
var vcodeParameter = vcode.HasValue ?
new ObjectParameter("vcode", vcode) :
new ObjectParameter("vcode", typeof(byte));
var yearcodeParameter = yearcode.HasValue ?
new ObjectParameter("yearcode", yearcode) :
new ObjectParameter("yearcode", typeof(byte));
var trannoParameter = tranno.HasValue ?
new ObjectParameter("tranno", tranno) :
new ObjectParameter("tranno", typeof(short));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Web_get_obj_details_Result>("Web_get_obj_details", hcodeParameter, vcodeParameter, yearcodeParameter, trannoParameter);
}
我如何访问SP:
IList<Web_get_obj_details_Result> ObjWeb_get_obj_details_Result = EntityObj.Web_get_obj_details(HobliCode, VillageCode, YearCode,TranNo).ToList<Web_get_obj_details_Result>();
此处HobliCode,VillageCode,YearCode,TranNo的类型为int。
仅供参考:这是我的SP
ALTER PROCEDURE [dbo].[Web_get_obj_details]
@hcode as tinyint , @vcode as tinyint , @yearcode as tinyint , @tranno as smallint
as
declare @dcode as integer , @tcode as integer
begin tran
select @dcode = dist_code , @tcode = taluk_code from mst_config
select convert(varchar(10),notice_sdate,103) as notice_sdate ,convert(varchar(10),obj_date,103) as obj_date,objector_name,obj_details from tr_objection
where dist_code= @dcode and taluk_code = @tcode and hobli_code = @hcode and village_code = @vcode and tran_no =@tranno and year_code=@yearcode
commit tran
每次更新模型时,我都不想更改该SP的上下文。任何解决方案为什么模型将类型取为bool,即使类型是int?
答案 0 :(得分:1)
您的存储过程使用tinyint
和smallint
作为参数类型。 EF在您的存储过程的访问器方法中反映了这一点,并生成包含在{{1}中的相应类型byte
和short
(又名Byte
和Int16
)的方法}。
EF数据库中的黄金法则首先是:不要修改生成的代码。它将在下次更新时被覆盖。
您有两种方法可以解决您的问题:
Nullable<T>
类型作为参数,并从数据库更新模型。访问方法将使用int
(又名int
)然后。这看起来像这样:
Int32