比如我有一个类继承DbContext 可以重写 OnModelCreating来移除约定
Public class SampleEntites : DbContext
{
protectedoverridevoid OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();//移除复数表名的契约
modelBuilder.Conventions.Remove<IncludeMetadataConvention>();//防止黑幕交易 要不然每次都要访问 EdmMetadata这个表
}
但现在SampleEntites不得不继承ObjectContext(架构已经写死了), 要怎么移除上面的约定。
Public class SampleEntites : ObjectContext
{
}
最好是改变架构。这是架构师应该做的工作,应该向他提出,否则他就是不负责任的架构师。
OjectContext这个东西里面放了一堆底层的方法属性,用起来让人火大的,实现还是能实现的,就是麻烦的要命,架构师的责任不应该有我们来承担。要不然以后再碰上个什么需求,你还是要用ObjectContext来解决,还是不能用DbContext,浪费的时间远远不止,而且还是那么多人用。
再说也不至于那么麻烦吧,可能是架构扩展性的原因吧,考虑不够周全,我们现在的项目任意版本的任意加,我们的ORM开始用L2S,后来EF4.0来了,用ObjectContext,再后来灯4.1稳定了,直接用DbContext,然后在迁移到4.3.1,非常平滑,非常简单,而且以前用ObjectContext或者是DataContext写的都还能正常和DbContext一起正常工作。写一个OrmContextCreateFactory就可以很好的管理所有的Context的并存问题。简单的工厂模式就可以生产各种框架各种版本的Context了,谁也不能保证以后微软升级不会再出个XXXContext吧。
项目中不允许用DbContext?
架构已经写好了,改的话也得是架构师去改,而且改动可能挺大。
@xiaobopoe: 实现有难度,找到一篇参考帖子:EF 4.1 - Use code-first without DbContext API