EntityFramework4的POCO模板生成FunctionImport返回空的服务端调用代码
2010-11-16 17:56
447 查看
我们知道EntityFramework4默认根据MODEL生成ServerCode,现在我们使用POCOT4模板。有个小问题,对于那些FunctionImport的存储过程没有返回值,却没有生成相应的CODE。主要生成于一个DataContext下,通常是XXXXX.Context.tt的模板。打开模板,你可以找到这么一行代码:
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
就是这里了,接下我们自己来修改一下。最后修改完后,如下:
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
把那个inputfile变量的值替换成你的edmx,就可以使用了。将生成这样的代码,注意这个方法返回是void:
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
当然你手写也是可以的,不过数量多就很累了。希望这篇POST对您开发有帮助。
作者:PetterLiu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-PetterLiuBlog。
if(edmFunction.ReturnParameter==null)
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
就是这里了,接下我们自己来修改一下。最后修改完后,如下:
<#
//*********************************************************
//
//Copyright(c)Microsoft.Allrightsreserved.
//ThiscodeislicensedundertheMicrosoftPublicLicense.
//THISCODEISPROVIDED*ASIS*WITHOUTWARRANTYOF
//ANYKIND,EITHEREXPRESSORIMPLIED,INCLUDINGANY
//IMPLIEDWARRANTIESOFFITNESSFORAPARTICULAR
//PURPOSE,MERCHANTABILITY,ORNON-INFRINGEMENT.
//
//*********************************************************
#>
<#@templatelanguage="C#"debug="false"hostspecific="true"#>
<#@includefile="EF.Utility.CS.ttinclude"#><#@
outputextension=".cs"#><#
CodeGenerationToolscode=newCodeGenerationTools(this);
MetadataToolsef=newMetadataTools(this);
MetadataLoaderloader=newMetadataLoader(this);
CodeRegionregion=newCodeRegion(this);
stringinputFile=@"model.edmx";
EdmItemCollectionItemCollection=loader.CreateEdmItemCollection(inputFile);
stringnamespaceName=code.VsNamespaceSuggestion();
EntityContainercontainer=ItemCollection.GetItems<EntityContainer>().FirstOrDefault();
if(container==null)
{
return"//NoEntityContainerexistsinthemodel,sonocodewasgenerated";
}
#>
//------------------------------------------------------------------------------
//<auto-generated>
//Thiscodewasgeneratedfromatemplate.
//
//Changestothisfilemaycauseincorrectbehaviorandwillbelostif
//thecodeisregenerated.
//</auto-generated>
//------------------------------------------------------------------------------
usingSystem;
usingSystem.Data.Objects;
usingSystem.Data.EntityClient;
<#
if(!String.IsNullOrEmpty(namespaceName))
{
#>
namespace<#=code.EscapeNamespace(namespaceName)#>
{
<#
PushIndent(CodeRegion.GetIndent(1));
}
#>
<#=Accessibility.ForType(container)#>partialclass<#=code.Escape(container)#>:ObjectContext
{
publicconststringConnectionString="name=<#=container.Name#>";
publicconststringContainerName="<#=container.Name#>";
#regionConstructors
public<#=code.Escape(container)#>()
:base(ConnectionString,ContainerName)
{
<#
WriteLazyLoadingEnabled(container);
#>
}
public<#=code.Escape(container)#>(stringconnectionString)
:base(connectionString,ContainerName)
{
<#
WriteLazyLoadingEnabled(container);
#>
}
public<#=code.Escape(container)#>(EntityConnectionconnection)
:base(connection,ContainerName)
{
<#
WriteLazyLoadingEnabled(container);
#>
}
#endregion
<#
region.Begin("ObjectSetProperties",2);
foreach(EntitySetentitySetincontainer.BaseEntitySets.OfType<EntitySet>())
{
#>
<#=Accessibility.ForReadOnlyProperty(entitySet)#>ObjectSet<<#=code.Escape(entitySet.ElementType)#>><#=code.Escape(entitySet)#>
{
get{return<#=code.FieldName(entitySet)#>??(<#=code.FieldName(entitySet)#>=CreateObjectSet<<#=code.Escape(entitySet.ElementType)#>>("<#=entitySet.Name#>"));}
}
privateObjectSet<<#=code.Escape(entitySet.ElementType)#>><#=code.FieldName(entitySet)#>;
<#
}
region.End();
region.Begin("FunctionImports");
foreach(EdmFunctionedmFunctionincontainer.FunctionImports)
{
varparameters=FunctionImportParameter.Create(edmFunction.Parameters,code,ef);
stringparamList=String.Join(",",parameters.Select(p=>p.FunctionParameterType+""+p.FunctionParameterName).ToArray());
stringreturnTypeElement="int";
if(edmFunction.ReturnParameter==null)
{
#>
<#=Accessibility.ForMethod(edmFunction)#>void<#=code.Escape(edmFunction)#>(<#=paramList#>)
{
<#
}
else
{
returnTypeElement=code.Escape(ef.GetElementType(edmFunction.ReturnParameter.TypeUsage));
#>
<#=Accessibility.ForMethod(edmFunction)#>ObjectResult<<#=returnTypeElement#>><#=code.Escape(edmFunction)#>(<#=paramList#>)
{
<#
}
foreach(varparameterinparameters)
{
if(!parameter.NeedsLocalVariable)
{
continue;
}
#>
ObjectParameter<#=parameter.LocalVariableName#>;
if(<#=parameter.IsNullableOfT?parameter.FunctionParameterName+".HasValue":parameter.FunctionParameterName+"!=null"#>)
{
<#=parameter.LocalVariableName#>=newObjectParameter("<#=parameter.EsqlParameterName#>",<#=parameter.FunctionParameterName#>);
}
else
{
<#=parameter.LocalVariableName#>=newObjectParameter("<#=parameter.EsqlParameterName#>",typeof(<#=parameter.RawClrTypeName#>));
}
<#
}
if(edmFunction.ReturnParameter==null)
{
#>
base.ExecuteFunction("<#=edmFunction.Name#>"<#=code.StringBefore(",",String.Join(",",parameters.Select(p=>p.ExecuteParameterName).ToArray()))#>);
}
<#
}
else
{
#>
returnbase.ExecuteFunction<<#=returnTypeElement#>>("<#=edmFunction.Name#>"<#=code.StringBefore(",",String.Join(",",parameters.Select(p=>p.ExecuteParameterName).ToArray()))#>);
}
<#
}
}
region.End();
#>
}
<#
if(!String.IsNullOrEmpty(namespaceName))
{
PopIndent();
#>
}
<#
}
#>
<#+
privatevoidWriteLazyLoadingEnabled(EntityContainercontainer)
{
stringlazyLoadingAttributeValue=null;
stringlazyLoadingAttributeName=MetadataConstants.EDM_ANNOTATION_09_02+":LazyLoadingEnabled";
if(MetadataTools.TryGetStringMetadataPropertySetting(container,lazyLoadingAttributeName,outlazyLoadingAttributeValue))
{
boolisLazyLoading=false;
if(bool.TryParse(lazyLoadingAttributeValue,outisLazyLoading))
{
#>
this.ContextOptions.LazyLoadingEnabled=<#=isLazyLoading.ToString().ToLowerInvariant()#>;
<#+
}
}
}
#>
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
把那个inputfile变量的值替换成你的edmx,就可以使用了。将生成这样的代码,注意这个方法返回是void:
publicpartialclassEntities:ObjectContext
{
publicvoidChangeForumID(stringthread,Nullable<int>forum)
{
ObjectParameterthreadParameter;
if(thread!=null)
{
threadParameter=newObjectParameter("Thread",thread);
}
else
{
threadParameter=newObjectParameter("Thread",typeof(string));
}
ObjectParameterforumParameter;
if(forum.HasValue)
{
forumParameter=newObjectParameter("Forum",forum);
}
else
{
forumParameter=newObjectParameter("Forum",typeof(int));
}
base.ExecuteFunction("ChangeForumID",threadParameter,forumParameter);
}
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
当然你手写也是可以的,不过数量多就很累了。希望这篇POST对您开发有帮助。
作者:
出处:
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-
相关文章推荐
- .NET调用控制台下生成的exe文件,传参及获取返回参数的思路及代码
- .NET调用控制台下生成的exe文件,传参及获取返回参数的思路及代码
- C编译器剖析_6.3.4 汇编代码生成_为函数调用与返回产生汇编代码
- wsdl 生成java服务端代码开发,客户端请求,服务端返回错误XXX are not understood解决方法
- cxf整合Spring框架进行服务端开发,并且通过cxf生成客户端代码进行调用
- sql生成(c#调用存储过程返回数据表)代码的存储过程
- 编写S-Function,创建Simulink模型并生成C++代码,编译生成可调用的动态库dll(From Simulink model to DLL A tutorial)
- eclipse调用WSDL生成客户端代码
- C#分析数据库结构,使用XSL模板自动生成代码
- FluentData-新型轻量级ORM 利用T4模板 批量生成多文件 实体和业务逻辑 代码
- 021-动态生成验证码jsp代码模板
- matlab 生成调用c/c++ 代码 mex 简单实用
- 动软代码生成与 EntityFramework 实体生成模板
- Yii2 自定义Gii生成代码模板
- cxf 方式三 是java客户端调用.net服务端 好使代码
- webservice客户端(使用java代码调用服务端)
- Project : error PRJ0019: 某个工具从以下位置返回了错误代码: "正在执行生成后事件...
- c# 程序调用代码生成数据库
- 分享:根据webservice WSDL地址自动生成java调用代码及JAR包
- ajax请求返回xml数据(含服务端代码)