发现一个RIA SERVICES的奇怪现象。
silverlight后台与数据的操作用RIA SERVICES。在使用的时候必然要生成一个DomainService.CS的域服务类。在生成的时候,你可以再选项卡里选择是否启用编辑,如果勾选了,它在生成的DomainService.CS文件中会自动添加实体类的增删改查的方法,查询是没有问题的,但是牵扯到数据库变动的insert()等方法的时候,只有逻辑判断,并没有最终的SaveChanges()方法来执行数据库的更新。那么这就造成如果在服务器端(注意是服务器端,不是客户端)的一个类中引用这个DomainService服务: MyDomainServices context = new MyDomainServices();并执行方法context.insert((enetity)xxx)后,是不会更新数据库的……微软为什么会这么设计呢?同时有个context.submit(changeset changeset)方法怎么用,是不是与这个更新有关?请各位大大指导一下。
编码如下:
自动生成的方法:
public void InsertT_User(T_User t_User)
{
if ((t_User.EntityState != EntityState.Detached))
{
this.ObjectContext.ObjectStateManager.ChangeObjectState(t_User, EntityState.Added);
}
else
{
this.ObjectContext.T_User.AddObject(t_User);
}
}
使用方法:
MyDomainServices context = new MyDomainServices();
T_User _T_User = new T_User();
_T_User.Name = userName;
_T_User.PassWord = password;
context.InsertT_User(_T_User);
执行后,数据库并没有更新,也没有报错。在InsertT_User(T_User t_User)中加入this.ObjectContext.SaveChanges()方法后就可执行数据库的更新,微软为什么不在生成的时候就自动加上去呢?
[解决办法]
使用context.Insertxxx是只添加一个数据,可以执行多次。最后执行ObjectContext.SubmitChanges()一次提交。这就代表着你可以一次向多个表Insert然后提交。实际这样做使程序更好的处理事务。要不得自己写事务代码。