ling to sql 如何记录对数据库的更改 (2)
我的环境:winxp, c#2008, sql 2005。数据访问技术:linq to sql
目前策略思路:系统中有若干个表,包括一个用户表,我在登录的时候记录用户的登录id,然后在每个表里面设置一个用户id的列和一个自动时间戳timestamp,然后在insert和update的时候写入用户id,自动时间戳则把操作的具体时间自动记录,
表的定义如下:
- SQL code
create table class( class nvarchar(10) not null, --班级 specialty nvarchar(40), --专业 counsellor nvarchar(12), --班主任 enroll int,--入学年份 userID int not null, --操作员 autoTS timestamp not null --自动时间戳)goalter table class add constraint pkClass primary key (class)goalter table class add constraint users$op$class foreign key (userID) references usersgo
在对这个表维护的时候,操作员和时间戳应该是不可见,由系统自动填充,如下图
在查询的时候应该都显示出来,如下图
在用户维护时候,点保存的处理代码如下:
- C# code
private void classesBindingNavigatorSaveItem_Click(object sender, EventArgs e) { try { db.SubmitChanges(); //private tuitionDBDataContext db = new tuitionDBDataContext(); } catch (Exception ex) { MessageBox.Show(ex.Message); } }问题:
1、我怎么让用户点保存按钮的时候,获取每一行已经被更改的数据,然后将操作员的id填入userID列?
2、sql里面的自动时间戳timestamp 为什么到这里显示成了这个模样,数据类型也变成了rowversion,怎么让他正确的显示年月日时分秒?
[解决办法]
1 linq生成的实体支持OnCreated,PropertyChanged,PropertyChanging这些方法和事件,我认为可以在这些扩展点上面把用户id填进去
2 timestamp类型的字段不需要写值,数据库自动会填.且一个表应该只有一个类型是timestamp的列
[解决办法]
LINQ会自动产生一个分部函数:OnValidate(),可在此函数中调用内置方法:datacontext.yourTable.GetModifiedMembers()方法获取是否被修改,如:
bool isChange= db.tbA.GetModifiedMembers(tbARecord).Count()!=0;
当isChange为ture时,则设置tbARecord的userID及时间。
[解决办法]
mark
[解决办法]
没研究过这玩意.只能看看.
[解决办法]
还没用过这样的功能,学习学习!