.nettiers和SQLite搅合到一块之后遇到的问题
第一步
用SQLiteStudio生成一个新的数据库,sqlitetest,新建一张表test,建立一个主键字段ID,一个字符字段Name,建立完成,留待后用。
第二步
用VS2010建立一个sqlitetest的控制台程序,添加System.Data.SQLite和System.Data.SQLite.Linq引用(.Net版本的SQLite在http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki下载,目前版本1.0.87.0对应SQLite 3.7.17)
第三步
用CodeSmith正常生成项目,添加sqlitetest.Data、sqlitetest.Data.GenericClient和sqlitetest.Entities三个项目到程序中,并添加引用
问题1
这时编译会提示“命名空间“sqlitetest”中不存在类型或命名空间名称“Data”。是否缺少程序集引用?”,需要修改程序的目标框架从.NET Framework 4 Client Profile改成.NET Framework 4。
问题2
这时运行会抛出异常“Unable to load NetTiersServiceSection”,需要添加app.config文件,添加下面的内容到config文件的最前面
<configSections>
<section name="sqlitetest.Data"
type="sqlitetest.Data.Bases.NetTiersServiceSection, sqlitetest.Data"
allowDefinition="MachineToApplication"
restartOnExternalChanges="true" />
</configSections>
还有两段内容也需要复制到config文件中,具体见生成的report.html
问题3
这时运行会抛出异常“未能加载文件或程序集“sqlitetest.Data.SqlClient”或它的某一个依赖项。系统找不到指定的文件。”,因为之前生成的代码还是使用SqlClient,而不是产生的GenericClient
type="sqlitetest.Data.SqlClient.SqlNetTiersProvider, sqlitetest.Data.SqlClient"
上面这行改成
type="sqlitetest.Data.GenericClient.GenericNetTiersProvider, sqlitetest.Data.GenericClient"
——————————
providerInvariantName="System.Data.SqlClient"
上面这行改成
providerInvariantName="System.Data.SQLite"
问题4
这时运行会抛出异常“SQL logic error or missing database near ".": syntax error”,原因是生成的dbCommand类似这样:
INSERT INTO .[test]
(
[Name]
)
VALUES
(
@Name
);
注意表名前面有个".",费了点功夫去跟踪了下这个东东的来历,长话短说,这个东东来自于System.Data.SQLite.Procedures.cst,第70行:
string owner = GetOwnerName(SourceTable, true);
改成这样:
string owner = GetOwnerName(SourceTable);
重新生成即可
问题5
GenericTestProviderBase.generated.cs,第646行注释掉
entity.Id = (System.Int64) reader["test.ID"];
换用644行
entity.Id = (long)reader["Id"];
修改GenericEntityProviderBase.generated.cst,第1024行,去掉注释
entity.Id = (long)reader["Id"];
注释掉1038行
//entity.<%=GetPropertyName(cols[i])%> = (<%=castTo%>) reader["<%=cols[i]%>"];
问题6
System.Data.SQLite.Procedures.cst,第288行
tempParams += string.Format("AND [{1}] = @{0} {2}", prefix + GetPropertyName(SourceTable.PrimaryKey.MemberColumns[i]), SourceTable.PrimaryKey.MemberColumns[i], Environment.NewLine) ;
改为
tempParams += string.Format("AND [{1}] = @{0} {2}", prefix + GetPropertyName(SourceTable.PrimaryKey.MemberColumns[i]), SourceTable.PrimaryKey.MemberColumns[i].Name, Environment.NewLine) ;
解决UPDATE时的异常
.nettiers和SQLite搅合到一块之后遇到的问题的更多相关文章
- tornado 学习笔记2 Python web主流框架
2.1 Django 官方网址:https://www.djangoproject.com/ 简介:Django is a high-level Python Web framework that e ...
- 关于android应用--内存的优化
以下内容为转载自网上,然后自己加工贴合到一块的: 原文地址:http://www.cnblogs.com/frydsh/archive/2012/12/09/2810601.html http://w ...
- About Undefined Behavior[译文]
原文:blog.llvm.org/2011/05/what-every-c-programmer-should-know.html 人们偶尔会问为什么LLVM的汇编代码有时会在优化器打开时产生SIGT ...
- django框架介绍
主要内容 1. Django框架发展 2. Django架构,MTV模式 3. 开发流程 4. 开发实例——Poll python下各种框架 一 ...
- 【笔记】Python基础二:数据类型之集合,字符串格式化,函数
一,新类型:集合 集合出现之前 python_l = ['lcg','szw','zjw'] linux_l = ['lcg','szw','sb'] #循环方法求交集 python_and_linu ...
- SSH和SSM的区别
一怒成仙 博客园 首页 新随笔 联系 管理 订阅 随笔- 54 文章- 1 评论- 0 SSH(Struts,Spring,Hibernate)和SSM(SpringMVC,Spring,M ...
- SSH(Struts,Spring,Hibernate)和SSM(SpringMVC,Spring,MyBatis)的区别
SSH 通常指的是 Struts2 做前端控制器,Spring 管理各层的组件,Hibernate 负责持久化层. SSM 则指的是 SpringMVC 做前端控制器,Spring 管理各层的组件,M ...
- 笨重的mfc还在基于系统控件,熟练的mfc工程师还比不过学习Qt一个月的学生开发效率高(比较精彩,韦易笑)
作者:韦易笑链接:https://www.zhihu.com/question/29636221/answer/45102191来源:知乎著作权归作者所有,转载请联系作者获得授权. 更新:擦,本来只有 ...
- 2016年我们重新思考移动互联网创业的风险, 微信还是APP?
感觉这两年前端开发又火起来了,很多做内容创业和做微电商创业的人,往往都选择了运营微信号.对于做纯技术开发的人来说,一般是看不上微信号的,感觉没什么技术含量,或者说没什么技术壁垒.也有另一批人观点相反的 ...
随机推荐
- mysql查询过去12个月的数据统计
SELECT DATE_FORMAT( FROM_UNIXTIME( t.`created_at`, '%Y-%m-%d %H:%i:%S' ), '%Y-%m' ) MONTH, count(t.c ...
- ubuntu 启动 ssh 服务
$ sudo service ssh start $ sudo /etc/init.d/ssh start 重启 $ sudo /etc/init.d/ssh restart $ sudo servi ...
- requirej入门(二)
requirejs中的一些基本知识,包括API使用方式等. 基本API require会定义三个变量:define,require,requirejs,其中require === requirejs, ...
- chrome 修改请求头的小工具
chrome 网上应用店中搜索 ModHeader
- Mac 系统变量
vim .bash_profile ========================= MAVEN_HOME = < ... > export MAVEN_HOME =========== ...
- day06 - Python - 面向对象
本节内容: 引子 面向对象 v.s. 面向过程 面向对象编程介绍 面向对象的特性: 封装 继承 多态 类.方法 1.引子 假设你现在是一家游戏公司的开发人员,现 ...
- MATLAB线性回归方程与非线性回归方程的相关计算
每次比赛都需要查一下,这次直接总结到自己的博客中. 以这个为例子: 2.线性方程的相关计算 x=[1,2,3,4,5]';%参数矩阵 X=[ones(5,1),x];%产生一个5行一列的矩阵,后接x矩 ...
- java 日志框架的选择Log4j->SLF4j->Logback
Log4j->SLF4j->Logback是同一个人开发的 import lombok.extern.slf4j.Slf4j; import org.junit.Test; import ...
- ArrayList代码分析
集合算是java中最常用的部分了,阅读该部分jdk代码可以让我们更加清楚的了解其实现原理,在使用时也能心中有数,有利于写出高质量的代码. ArrayList 底层数组实现,初始长度10,超过长度后的自 ...
- SQL DATEDIFF语法及时间函数 Sql 查询当天、本周、本月记录
SQL DATEDIFF语法及时间函数 Sql 查询当天.本周.本月记录 转:http://blog.csdn.net/Json1204/article/details/7863801?locatio ...