实体框架 – 我不需要/想要一把钥匙!

我有一些观点,我想使用EF 4.1进行查询.这些是特定的优化视图,无法提及;没有删除,更新,只是很好的选择.

但EF希望在模型上设置关键字.有没有办法让EF继续前进,没有什么可担心的?

更多细节

这样做的主要目的是查询已按大小,查询参数和连接进行优化的一组视图.基础表有PK,FK等.它是索引的,statiscized(一个词?)和优化.

我想要一个类(这是我所拥有的更小更简单的版本……):

public MyObject //this is a view
{
   Name{get;set}
   Age{get;set;}
   TotalPimples{get;set;}
}

和一个基于EF 4.1 CF的存储库,我可以

public List<MyObject> GetPimply(int numberOfPimples)
{
    return db.MyObjects.Where(d=> d.TotalPimples > numberOfPimples).ToList();
}

我可以暴露一把钥匙,但最终是否有一个2或3列自然键的真正目的呢?那将永远不会被使用?

现行解决方案

看起来他们不会使用EF CF解决方案,我在模型中添加了一个复杂的密钥,我将其暴露在模型中.虽然这与人们期望“设计良好”的数据库模型看起来像“毋庸置疑”,在这种情况下,恕我直言,它只为模型构建器添加了更多逻辑,线上更多字节,以及额外的属性一类.永远不会使用它们.

最佳答案 没有办法. EF需要唯一标识记录 – 实体密钥.这并不意味着您必须公开任何其他列.您可以将所有当前属性(或任何子集)标记为键 – 这正是EDMX在向模型添加数据库视图时的工作方式 – 它遍历列并将所有非可空和非计算列标记为主键.

您必须知道一个问题 – EF internally uses identity map和实体密钥是此映射中的唯一标识(每个实体密钥只能与单个实体实例关联).这意味着如果您无法选择记录的唯一标识,并且您使用相同的标识(您定义的密钥)加载多个记录,则它们将全部由单个实体实例表示.如果您不打算修改这些记录,请不确定这是否会导致任何问题.

点赞