LinqObjectModel Save

Dec 2, 2009 at 1:15 PM

LinqObjectModel的Save现在是void

为啥不返回一个this

Coordinator
Dec 2, 2009 at 1:53 PM

你想对这个返回值写什么样的代码呢?像下面这样么:

User.New.Init("tom", 18).Save().Name = "jerry";

 

Coordinator
Dec 2, 2009 at 1:55 PM

还是:

var user = User.New.Init("tom", 18).Save();

 

Dec 3, 2009 at 4:51 AM

后者

var user = User.New.Init("tom", 18).Save();

表示上一个存储的对象是他

Coordinator
Dec 3, 2009 at 5:48 AM

定义了一个 user,表示你在后面的代码里要用它,为什么你觉得以下的代码不好呢:

var user = User.New.Init("tom", 18);
user.Save();
user.Name = "jerry";

Dec 3, 2009 at 1:13 PM

没什么不好,就是想少写一行而已。

Coordinator
Dec 4, 2009 at 2:51 AM

Save不返回值,主要是DbContext里Insert和Update也是不返回值的(原来想返回受影响的行数的),不过也许你说的对,DbObjectModel和DbContext不需要有相同的行为。回头加上吧。

不过,我还是建议多写一行,不容易混淆,代码是编写一次,阅读多次的,易读比易写更重要。

 

Dec 4, 2009 at 7:45 AM

恩,我赞成易读比易写更重要的观点

Coordinator
Dec 9, 2009 at 5:26 PM

这样修改了Save函数之后,有一个比较严重的问题。

Save函数是在DbObjectSmartUpdate里定义的,在DbEntry内部也会使用DbObjectSmartUpdate.Save函数。

为了实现返回T,在DbObjectModelBase<T, TKey>里使用new进行了Save函数的重定义。

所以,如果用户override了Save函数,那么,从DbEntry内部调用的DbObjectSmartUpdate.Save将不会体现出这个override。

考虑还是改回返回void的状态。

 

Dec 11, 2009 at 12:59 AM

还是改回void吧,,多写一行,代码也更清晰

那个重载还是比较重要的。

Dec 11, 2009 at 3:02 AM

噢,还有这么多层关系,那还是Void吧。