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类型继承自出版物的事实是否排除了将其他字段拆分为新类型?
您可以认为这是实体框架的限制:实际上有两部分,底层数据库项的模型和从模型构建的实体。实体的子类不会影响模型。
如果您不想加载模型行的所有数据,请对其进行投影:
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 数据库中维护关联的键。
| 归档时间: |
|
| 查看次数: |
677 次 |
| 最近记录: |