ling to sql 如何记录对数据库的更改

文飞扬 2008-10-05 11:47:09
我的环境:winxp, c#2008, sql 2005。数据访问技术:linq to sql
目前策略思路:系统中有若干个表,包括一个用户表,我在登录的时候记录用户的登录id,然后在每个表里面设置一个用户id的列和一个自动时间戳timestamp,然后在insert和update的时候写入用户id,自动时间戳则把操作的具体时间自动记录,但是这个实现也有困难,利用触发器实现就不知道怎么把id传过去,利用linq 对象关系设计器默认生成的操作方法也不知道怎么实现将id记录到表里。
请问:1、这个思路可行吗?怎么具体实现?
2、有其他什么更好的思路?怎么具体实现?
...全文
314 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
挨踢啊挨踢 2008-10-07
  • 打赏
  • 举报
回复
在操作员登录时记下操作员的ID,然后通过linq更新操作的记录就行啊。
文飞扬 2008-10-07
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 phy 的回复:]


你的这个思路本身是完全可行的,只是有几个问题可能还需要解决。
1:从你的目的来看似乎是要记录“操作员”和“操作时间”,以实现类似日志的效果。我觉得是否有必要写入多个表格?是否在设计时存在冗余?

2:使用LINQ处理你的这个问题从某种程度上来说是相当简单的,只是需要对LINQ比较了解。比如要实现你这个功能你只需要在需要记录的对象(ENTITY)的相应的赋值属性中添加对operatorCode和updateTime字段的更新操作…
[/Quote]
1、每个表的每条记录增加一个操作员和一个操作时间,可以精确记录那条记录是谁在何时完成的,应该基本不存在冗余,因为你记录在其他地方也需要这些空间。
2、我初次学习linq,不熟悉怎么操作。
3、用一个表记录,每个用户什么时候登录,什么时候退出,什么时候将哪个表的哪条记录由什么值更改为什么值,哪个时候添加或者删除一条什么记录,当然很好,但是我现在不会做这个,呵呵,因此想出这么一个相对简单的办法。

请看这个贴子
http://topic.csdn.net/u/20081007/18/6f08009a-5edc-49ab-8118-35a5a37fd0ea.html?seed=152102382
brallow 2008-10-07
  • 打赏
  • 举报
回复


你的这个思路本身是完全可行的,只是有几个问题可能还需要解决。
1:从你的目的来看似乎是要记录“操作员”和“操作时间”,以实现类似日志的效果。我觉得是否有必要写入多个表格?是否在设计时存在冗余?

2:使用LINQ处理你的这个问题从某种程度上来说是相当简单的,只是需要对LINQ比较了解。比如要实现你这个功能你只需要在需要记录的对象(ENTITY)的相应的赋值属性中添加对operatorCode和updateTime字段的更新操作就可以了;

3:从思路上来说我觉得可以有几个改进:
*使用统一的方式记录你的日志,不是多个表而是一个表;
*不要把这种操作附加在其它表中,而独立成一个表,这样方便你添加属性。
文飞扬 2008-10-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 eastsun_genius 的回复:]
在操作员登录时记下操作员的ID,然后通过linq更新操作的记录就行啊。
[/Quote]
我就是不知道怎么操作!
我已经记录了id,这个id只能由系统自动填充,但是,点击导航栏上面的保存,就调用datacontext的submitchange()函数,如何在这个前面识别出所有被更改的记录(包括插入和修改两种),然后在这些记录的id字段自动填入操作员的id呢?
文飞扬 2008-10-06
  • 打赏
  • 举报
回复
我只是想记录在什么时候,什么人对数据库记录进行了更改,和id是不是identity没有关系
dawugui 2008-10-06
  • 打赏
  • 举报
回复
不懂,帮顶.
lff642 2008-10-06
  • 打赏
  • 举报
回复
顶上.
pt1314917 2008-10-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 lwb75 的帖子:]
我的环境:winxp, c#2008, sql 2005。数据访问技术:linq to sql
目前策略思路:系统中有若干个表,包括一个用户表,我在登录的时候记录用户的登录id,然后在每个表里面设置一个用户id的列和一个自动时间戳timestamp,然后在insert和update的时候写入用户id,自动时间戳则把操作的具体时间自动记录,但是这个实现也有困难,利用触发器实现就不知道怎么把id传过去,利用linq 对象关系设计器默认生成的操作方法也不知道怎么实现将…
[/Quote]

不清楚楼主到底是什么问题,如果你的id列是自增的话,插入数据时可以在linq中,
修改以下三个属性,
如:IsPrimaryKey=true,IsDbGenerated=true ,AutoSync=AutoSync.OnInsert
这样用linq插入数据时,就不需要指定id的值了。

文飞扬 2008-10-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 pt1314917 的回复:]
引用 7 楼 lwb75 的回复:
我只是想记录在什么时候,什么人对数据库记录进行了更改,和id是不是identity没有关系


这个使用linq会有什么问题?不跟普通的插入数据、修改数据一样啊?
[/Quote]

这里的用户id是指登录系统的任意操作员,我们不能指望操作员在修改数据库记录的时候还把自己的id值填入记录里面,只能由系统自动完成,于是,操作员登录系统的时候,必定使用用户名和密码,据此我就记录了他的id,然后他在修改任意数据库记录的时候,我要把这个操作员id和操作时间同时写入这条记录,我就在每个表设置了用户id和自动时间戳。
pt1314917 2008-10-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lwb75 的回复:]
我只是想记录在什么时候,什么人对数据库记录进行了更改,和id是不是identity没有关系
[/Quote]

这个使用linq会有什么问题?不跟普通的插入数据、修改数据一样啊?
昵称被占用了 2008-10-05
  • 打赏
  • 举报
回复
还没学习
liangCK 2008-10-05
  • 打赏
  • 举报
回复
不懂LINQ
水族杰纶 2008-10-05
  • 打赏
  • 举报
回复
只能帮顶~~~~~

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧