C# 如何在实体框架中唯一标识实体?

C# 如何在实体框架中唯一标识实体?,c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,我正在使用实体框架作为ASP.Net(webforms)应用程序的ORM。假设我的应用程序中有一组“列表/详细信息”页面,当您单击列表页面中的一行时,我希望将该行的某种类型的ID传递给详细信息页面,然后使用该页面从数据层加载该行。在我的特定情况下,主键只是一个“rowId”标识列 然而,EF似乎更喜欢“隐藏”主键/外键,这样您就无法访问它们(默认情况下) 我是EF的新手,我想知道是否有在实体上下文之外唯一标识行的最佳实践。我想我可以在我的记录中添加一个uniqueidentifier列,在我的实

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

然而,EF似乎更喜欢“隐藏”主键/外键,这样您就无法访问它们(默认情况下)

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

在我的_ItemDataBound()事件处理程序中,我认为我可以执行以下操作:

var announcement = (Announcement) e.Item.DataItem;
string rowID = announcement.EntityKey.EntityKeyValues[0].Value.ToString();
这是建议的,还是仅仅针对框架工作

提前谢谢


Scott

不,您所做的不是“针对(实体)框架工作”。这并不是说它无法改进,但是:

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

  • 实现存储库模式实际上将是我的下一次重构:)我不确定我从哪里得到的印象是.RowID属性对我不可用。。。在这种情况下,这对我来说很好。关于#3的观点很好。。。我是EF的新手,我知道我应该和不应该用它做什么。