初探.NET 4.0中的Entity Framework
今天无意中看到一篇文章,介绍了.NET Framework 4.0中的Entity Framework的设计与使用。文章开头部分提到了Database First和Model First两种应用程序设计方式。从.NET Framework 3.5 SP1开始,Database First的思想就开始伴随我们,它支持反向工程,可以将数据库中的表反向生成支持DLinq的模型。而从即将到来的.NET Framework 4.0开始,我们就可以以Model First的方式处理问题,即通过白手起家设计模型,而后再生成数据库结构,以便模型对象能够持久化到数据库中。
看到这里,我备感欣慰。.NET Framework在领域驱动设计上终于迈进了一大步。在我的《【领域驱动设计】.NET实践:立足领域》一文中,我早就提到,软件设计必须立足领域,而不要去管数据库是什么结构、用的什么技术。从.NET 3.0的Database First到.NET 4.0的Model First,这就是进步,.NET从4.0开始,已经慢慢走向领域驱动设计的正路。
Microsoft ADO.NET Team Blog的这篇文章详细介绍了如何通过模型来生成数据库结构,这让我们对于Entity Framework存在的现实意义有了个直观的认识。微软在通过模型生成数据库结构这一功能上是下了功夫的,用户可以随心所欲地定制DDL的生成过程。不过遗憾的是,从目前来看,Entity Framework没法应对模型变更的情形,例如系统用了一段时间后发现需要更改某些业务逻辑,从而不得不对模型进行修改,这样一来,目前的Entity Framework只能是通过CreateDatabase调用来重新生成数据库结构,而无法动态地对其进行增量修正。
针对这一问题,Entity Framework开发组的Noam Ben-Ami项目经理回答如下:
1. We do not offer this capability from the designer. The intent is that existing Microsoft or third party tools be used to diff the DDL against the database.(我们不会从设计器上去提供这样的功能,这是因为,已有的Microsoft或者第三方工具可以通过比对DDL和数据库结构来解决这个问题)
2. The system is sufficiently extensible that this functionality can be added in. We may release bits that do this as a codeplex project (or some other public release mechanism.)(Entity Framework具有足够的扩展性,添加这样的功能是完全可行的,我们可能会通过codeplex或者其它的公共发布机制来发布这样的功能)
3. We have gotten sufficient feedback from many sources on this that we will investigate making this functionality a code part of the product as soon as is reasonably possible.(针对这一问题,我们已经通过各种渠道获得了足够的反馈信息,在条件成熟时,我们会对是否将这部分功能做到产品里进行调研)
总体来讲,我很高兴Microsoft能在DDD上走出如此重要的一步。