表格拆分继承的实体类型?

Fau*_*ust 10 entity-framework-4

我有一个名为Image的实体类型,它继承自Publication(有5种其他类型的Publications,都共享10个公共属性).

不幸的是,我的数据库中的图像表包含4个二进制列,其中包含4个不同分辨率图像版本的数据,因此EF图像类型有4个属性:BinOriginal,BinHiRes,BinLowRes,BinThumbnail,包含非常大量的数据.

这会影响性能.例如,当我只是生成一系列图像链接时,我不想获取所有二进制数据.

所以我尝试了表格拆分,将4个二进制字段放入一个新的ImageFile实体中:http://blogs.msdn.com/b/adonet/archive/2008/12/05/table-splitting-mapping-多实体类型到最同table.aspx

我已经确保了正确的表映射,添加了1-1关联并包含了引用约束,但是我收到了这个错误:

Error 3033: Problem in mapping fragments starting at line 2731:EntitySets 
'ImageFiles' and 'Publications' are both mapped to table 'Images'. Their primary 
keys may collide.
Run Code Online (Sandbox Code Playgroud)

...似乎存在一个问题,即被拆分的表涉及继承关系.

我尝试从Publication继承新的ImageFile EF类型,但后来我收到一个错误:

Problem in mapping fragments starting at lines 2332, 2374:Two entities with 
different keys are mapped to the same row
Run Code Online (Sandbox Code Playgroud)

问题有没有解决这个问题的方法,或者我需要图像EF类型继承自出版物的事实是否排除了将其他字段拆分为新类型?

Chr*_*son 1

您可以认为这是实体框架的限制:实际上有两部分,底层数据库项的模型和从模型构建的实体。实体的子类不会影响模型。

如果您不想加载模型行的所有数据,请对其进行投影:

var results = from product in myDB.Products
              where product.Id == productId
              select New 
              {
                  Id = product.Id, 
                  Name = product.Name, 
                  ImageUrl = product.ImageUrl
              };
Run Code Online (Sandbox Code Playgroud)

实体框架创建的 SQL 查询仅选择selectLINQ 查询子句中的列。

这还可以防止实体框架将表行存储到ObjectContext(或DBContext对于 EF 5)对象中。

附带说明一下,我个人很想在 NoSQL 解决方案中存储较大的二进制数据,并自己在 SQL 数据库中维护关联的键。