2009-07-23 76 views
0

我正在使用实体框架作为我的ORM为ASP.Net(webforms)应用程序。假设我在应用程序中有一个“list/detail”页面集,当你点击列表页面中的一行时,我想将该行的某种类型的ID传递给一个详细信息页面,然后我会使用它从我的数据层加载行。在我的具体情况中,主键只是一个“rowId”标识列。我将如何唯一标识实体框架中的实体?

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

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

在我_ItemDataBound()事件处理程序,我想我可以这样做:

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

是这个建议,或者只是对工作的框架?

在此先感谢。

Scott

回答

1

不,你在做什么不是“针对(实体)框架”。然而,这并不是说它不能改进:

  1. 我知道这不是MVC,但即使在WebForms中,我仍然认为在数据层和Web之间有一些区别是个好主意页面。我可能会在此处使用Repository模式和演示模型,而不是直接向页面提供实体框架的知识。
  2. 由于您已将公告转换为适当的类型,因此您可以直接访问ID值,而不必通过EntityKey。那么,至少,你的页面只知道公告而不是实体框架。
  3. 当前的代码假定存在一个EntityKey(并非总是为真,特别是对于尚未提交到数据库的新插入的实体),并且它只有一列。测试这些推定并抛出一个有意义的异常,而不是让它们在被违反时用空引用放大是一个好主意。
+1

实现存储库模式实际上将是我的下一个重构:)我不知道我在哪里得到了.RowID属性不会被我使用的印象......这适用于我在这种情况下。 #3的好处...我是EF新手,感觉我应该做什么,不应该做什么。 – 2009-07-23 17:11:09