62,243
社区成员




public class ABC
{
public int X;
public DateTime Y;
public string Z;
public DEF u;
public HG[ ] v;
}
然后代码中有一句Db.RegisterType(typeof(ABC));
那么我们的ORM系统就会自动给创建ABC、DEF、HG三个数据库表,以及其中间关联表了。当程序源代码被改动了,程序再次运行时,由于记录有Register过的每一个数据库关联实体类型的信息签名,所以“一瞬间”就能判断出哪些数据库表需要先自动升级(大不了,如果你的升级程序不够智能,你可以在程序启动时立刻检测出来并且报一个错,让测试人员反馈给开发人员)。
并且当你修改了代码中的实体定义后,查询时类似于直接写var query = from x in Db.RemoteTable<ABC>() where x.u.Name=="张三" select x;
这就行了,返回的就是你修改过的定义的对象。并不需要用好几分钟时间vs去在内存中重建什么数据模型类,然后才能编译程序并开始测试。(我们的查询时基于sql语句的,想开发linq provider后来放弃了,因为我们转到 NoSql数据库上了)
这一切的 ORM 操作都是自动化的。这种极端方便的维护数据库的方式(毫无传统dba的痕迹的方式)才叫做ORM!
所以我说,微软的 code first 的基本功能太差了,使用起来太繁琐,让人无法接受。但是我同样的理由,觉得 db first 的方式更是难用得没法提。
所以我对于这类 ORM 工具的“方便性”的排序是这样的,db first最差,code first第二差,都比一个好点的第三方 ORM 难用数倍。