首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

linq to sqlite的更新有关问题

2012-04-12 
linq to sqlite的更新问题IDE:vs2010 C#sqlite providerhttp://system.data.sqlite.org/downloads/1.0.80.

linq to sqlite的更新问题
IDE:vs2010 C#
sqlite provider
http://system.data.sqlite.org/downloads/1.0.80.0/sqlite-netFx40-setup-bundle-x86-2010-1.0.80.0.exe
项目里直接引用的System.Data.Sqlite.dll
表结构:

SQL code
create table tags(   tagId guid primary key,   title varchar(50),   createdDate datetime)

实体类:
C# code
[Table(Name="tags")]public class Tag{   [Column(Name="tagId",IsPrimaryKey=true,DbType="varchar(50)")]   public Guid TagId { get; set; }   [Column(Name = "title")]   public string Title { get; set; }   [Column(Name = "createdDate")]   public DateTime CreatedDate { get; set; }}public class TagDataContext : DataContext{   public Table<Tag> Tag;   public TagDataContext(SQLiteConnection con) : base(con) { }}


更新代码:
C# code
string strcon = "Data Source = notesdb.db3;pooling=true;failifmissing=false;";TagDataContext ctx = new TagDataContext(new SQLiteConnection(strcon));Tag t = ctx.Tag.Single(x => x.Title == "99999");t.Title = "呵呵";ctx.SubmitChanges();


代码和环境就是上边这些了,问题是这样的.在利用linq进行更新的时候.总会抛出异常"找不到行或者行已更改".出现这问题首先搜了下网上的解决办法.就那么两篇文章介绍这个问题.而解决办法就是那三种.update check,主键,还有ObjectChangeConflict.Resolve(RefreshMode);
但依然出现这个问题,后来试了下之前写的小程序,发现实体类里只要主键不是Guid就可以进行更新.但是在网上发现也有使用Guid类型的主键.
然后利用vs2010自带的sqlserver自动创建实体类,发现主键添加了DbType="uniqueidentify" 但是sqlite没有这个类型(依然是同样的异常),最后改成DbType="varchar(50)".问题才解决.
想请问大家几个问题:
1:为什么DbType为varchar的时候可以进行更新
这个DbType参数在更新过程中执行了什么操作
由于抛异常DataContext.log看不见.

2:sqlite中guid应该设置什么类型比较好

3:怎么在插入和更新操作中把DateTime格式化
现在的createdDate字段存储的记过全部是精确到毫秒级的
例如:2012-3-5 12:3:6:15251转换成 2010-03-05 12:03:06就可以了

4:有没有自动生成实体类的工具,手敲要吐了,表太多了.


[解决办法]
有没有自动生成实体类的工具,手敲要吐了,表太多了.
自带的就有
[解决办法]
探讨

有没有自动生成实体类的工具,手敲要吐了,表太多了.
自带的就有

热点排行