我已经把自己写进了一个角落,在哪里放置数据库特定的辅助方法

时间:2013-04-09 18:47:48

标签: c# entity-framework inversion-of-control

好的,我不认为我的控制器应该知道sql。

我想将传入的空值转换为我的操作,以更改为MinValue

var salesFrom = Model.SalesFrom ?? SqlDateTime.MinValue;

但是,如果我将此行添加到我的控制器操作中,那么我的控制器将转向SQL特定的实现。所以,我认为它属于我的服务....但是,因为它是一个因实现而异的声明,我不想让它成为我的IService的一部分因为那时我必须实现它我创建的任何服务。

最后,我想将它添加到DataContext,但我的控制器不直接访问Context ....

3 个答案:

答案 0 :(得分:1)

由于您使用的是EF Code-First,因此请将模型类的默认值SalesFrom属性设置为SqlDateTime.MinValue。或者,这也是SQL特定的吗?

答案 1 :(得分:1)

我对EF知之甚少,但我认为这是一种很好的做法。

我喜欢让我的模型/控制器完全与数据库无关。

如果我是你,我会怎么做:

  1. 在控制器/模型(mvc)中使用 DateTime 而不是使用SQLDateTime。
  2. 如果必须,稍后在另一个层(例如DAO)中进行转换 (例如我使用nHibernate,它为我处理,我只使用DateTime)
  3. 祝你好运

答案 2 :(得分:0)

您可以尝试为您的DbContext覆盖OnModelCreating,并使用Fluent API为生成的列指定数据库默认值。