首先是EF 4.1模型中的图像数据类型

时间:2011-06-27 10:11:02

标签: entity-framework entity-framework-4.1 sql-server-ce blob ef-model-first

我们有一个使用Entity Framwork 4.0的项目。我们绘制模型,然后生成SQL Compact 3.5 DB。

由于我们需要一个大型BLOB存储,因此我们使用 Image 数据类型创建了一个列(因为二进制限制为8000字节)。但是,当更新到EF 4.1时,我们的模型被静默转换为具有 Binary 列而不是!

不用担心,我们想,我们只会改回来。问题是图像不能再被选中了!并且 - 指定二进制文件并将 length 设置为较大的值,例如100000,在尝试生成数据库时会出错。

我们发现了一些使用代码优先方法的指针,来自EF 4.1 Release NotesA related ADO.net team blog postA third post describing the related issueA SO questing discussing the related issue。但是,所有这些都是使用 Code First 方法来讨论这个问题。

有关解决它的任何指示模型优先

谢谢!

2 个答案:

答案 0 :(得分:0)

将您的图像转换为字节数组并将其存储为然后将其从数据库中拉出来转换为图像,这是我存储大部分blob类型数据的方式 至于您提到的代码第一个方法问题,有一个特定的原因,你不能使用代码第一API和流畅的数据库映射

编辑:

对于大于8kb的数据类型,请使用varbinary(max),因为将来不再使用该映像ref 如果您首先使用模型,则在edmx文件中,如果使用数据库优先设计,则可以在设计器中选择列时在属性部分设置列数据类型,然后可以更改数据库中的数据类型,然后从数据库

codefirst api创建您的数据库然后使用反向工程师代码首先使用实体​​框架powertools ctp生成您的代码第一个模型和上下文

答案 1 :(得分:0)

您需要使用XML编辑器打开模型文件.edmx。在<edmx:StorageModels>部分中,将Type的数据Propertyvarbinary更改为image。 例如:

<EntityType Name="DataSet">
 <Property Name="data" Type="image" Nullable="false" />
</EntityType>

您可能还需要手动更改.sdf文件中的列类型。

这是一个小小的黑客,所以每次更换模型时都必须这样做。