1

在我的项目中,我有EF with ADO.NET. 假设我有Entity Framework以下课程

class Product
{
   int Id { get; set;}
   string Name { get; set; }
   int TypeId { get; set; }
   int CategoryId { get; set; }
}

class Type
{
   int Id { get; set; }
   string Name { get; set; }
}

class Category
{
   int Id { get; set; }
   string Name { get; set; }
}

然后我有navigation properties

  1. hasCategory:从 Category(Id) 到 Product(CategoryId),从 ​​1 到 Many
  2. hasType:从 Type(Id) 到 Product(TypeId),从 ​​1 到 Many

因此,如果我想访问产品的特定类别名称或类型名称(给定上下文):

int productId = 1;
var categoryName = context.Products.Single(p => p.Id == productId).hasCategory.Name;
var typeName = context.Products.Single(p => p.Id == productId).hasType.Name;

现在,如果我有属性名称,我可以获得该属性:

string propertyName = "CategoryId";
var propertyValue = GetType(Product).GetProperty(propertyName)

鉴于propertyName我想知道是否有任何方法可以获取匹配的导航属性(hasCategoryhasType)以获取名称。Oterhwise 我不知道我应该在这两个类中Category寻找Type哪一个。

4

1 回答 1

0

也许尝试相反的方向?

附加对象动态接收“RelationshipManager”属性。它提供了一个有用的方法 GetAllRelatedEnds(),它返回“RelatedEnd”的集合,您可以在其中找到例如关系名称。

Object myObj;
var q = myObj.GetType().GetProperties().Where(p => p.PropertyType == typeof(RelationshipManager)).First();
RelationshipManager rm = q.GetValue(myObj, null) as RelationshipManager;
foreach (RelatedEnd re in rm.GetAllRelatedEnds())
{
    // Here you get the "other-side" objects
}

尽管如此,导航属性的名称仍然是私有的:(希望这能接近某人的解决方案

于 2013-04-17T08:16:11.207 回答