如何在Entity Framework中唯一标识实体?

时间:2009-07-23 01:27:36

标签: c# asp.net entity-framework

我正在使用实体框架作为ASP.Net(webforms)应用程序的ORM。假设我的应用程序中有一个“列表/详细信息”页面集,当您单击列表页面中的某一行时,我希望将该行的某种类型的ID传递给详细信息页面,然后我将使用从我的数据层加载行。在我的特定情况下,主键只是一个“rowId”标识列。

然而,

EF似乎更喜欢“隐藏”主键/外键,以便您无法访问它们(默认情况下)。

我是EF的新手,我想知道是否有最佳实践来唯一识别实体上下​​文之外的行。我想我可以在记录中添加一个uniqueidentifier列,并为我的实体模型添加匹配的属性,但有效地为该行提供2个唯一标识符似乎是多余的。有没有更好的方法在表示层上携带标识符?

在我的_ItemDataBound()事件处理程序中,我想我可以做类似的事情:

var announcement = (Announcement) e.Item.DataItem;
string rowID = announcement.EntityKey.EntityKeyValues[0].Value.ToString();

这是推荐的,还是只是反对框架?

提前致谢。

斯科特

1 个答案:

答案 0 :(得分:1)

不,你所做的并不是“与(实体)框架相悖”。但这并不是说它无法改进:

  1. 我知道这不是MVC,但即使在WebForms中,我仍然认为在数据层和网页之间进行一些分离是个好主意。我可能会在这里使用Repository模式和表示模型,而不是让页面直接了解Entity Framework。
  2. 由于您已将公告转换为正确的类型,因此您可以直接访问ID值,而不是通过EntityKey。然后,至少,您的页面只知道公告而不是实体框架。
  3. 当前代码假定存在EntityKey(并非总是如此,特别是对于尚未提交到数据库的新插入实体)并且它只有一列。测试这些假设并抛出一个有意义的异常是一个好主意,而不是在它们被违反的情况下让它们用空引用爆炸。