2012-01-26 128 views
0

我正在研究一个asp.net MVC 3 web应用程序,我首先使用数据库,但是在将数据库表映射到使用实体框架的实体类后,我正在与这些表进行交互因为我将通过将数据库表作为类对象进行处理,从而以代码优先的方式进行交互。代码第一种方法与数据库第一种方法

因此,将表映射到实体类后,我发现代码优先方法和数据库优先级非常相似,但从头开始编写实体类(如代码优先),我已经从现有数据库创建实体类表 - 这对我来说更容易和更方便。

那么有没有特定的情况下,我将无法做一些功能,除非我使用了一种方法,直到现在我找不到任何功能?

回答

1

我认为CodeFirst的最大局限性(与ModelFirst/DatabaseFirst方法相比)是您无法将CUD操作映射到存储过程。如果你不打算这样做,那么你应该很好去。 更具体地说 - 你可以在DbSet上使用SqlQuery方法调用存储过程,这会导致返回的实体被跟踪,或者在数据库类上使用更一般的SqlQuery和ExecuteSqlCommand(对于Database.SqlQuery,返回的对象不一定是实体,没有跟踪这些对象)。就是这样。您不能将创建/更新/删除操作映射到存储过程。 FunctionImports不支持以及

编辑

这是可能的CUD操作映射到使用DB-1 EDMX预EF 4.1 EF6存储过程现在

+0

我目前正在通过调用存储过程来做一些功能,所以你的意思是我不能在代码优先的方法中使用存储过程? –

+0

您可以在DbSet上使用SqlQuery方法调用存储过程,这会导致返回的实体被跟踪,或者在数据库类上使用更一般的SqlQuery和ExecuteSqlCommand(对于Database.SqlQuery,返回的对象不一定是实体,并且没有跟踪这些实体对象)。就是这样。您不能将创建/更新/删除操作映射到存储过程。 FunctionImports也不受支持。 – Pawel

+0

@Pawel这是很好的信息,你应该把你的答案。 – danludwig

2

已经处理了许多许多的头痛,我部分代码优先。但我不会传福音。

除了帕维尔的回答&评论中提及的直接存储过程映射&功能导入功能,您将无法更改名称空间或任何其他代码生成的文件,当您使用DB-第一。 Afaik所有的文件都嵌套在.tt文件下。如果有方法将它们移动到项目中的逻辑文件夹&名称空间中,那么我不知道它。

另外,如果你曾经想将你的DbContext分离成一个单独的项目从你的实体,我记得这是可能的前EF 4.1。但它更麻烦,因为每更改一次db都必须在两个.tt文件上运行自定义工具。使用代码优先,这是非常简单的,因为你正在处理纯粹的OOP。

相关问题