C# 如何获取纯关系记录的相关表和键值?
我有两个表,C# 如何获取纯关系记录的相关表和键值?,c#,entity-framework-5,C#,Entity Framework 5,我有两个表,Product和Category,它们有一个纯多对多交叉表,ProductCategory(即ProductCategory只包含两个字段,ProductID和CategoryID)。EF为我很好地模拟了这一点,因此产品具有类别属性,类别具有产品属性 现在,我想创建一个审计跟踪,无论何时插入、更新或删除记录,都会进行跟踪。通过创建分部类的另一半MyEntities并重写SaveChanges(),我成功地实现了这一点。因此: public override int SaveChang
Product
和Category
,它们有一个纯多对多交叉表,ProductCategory
(即ProductCategory
只包含两个字段,ProductID
和CategoryID
)。EF为我很好地模拟了这一点,因此产品
具有类别
属性,类别
具有产品
属性
现在,我想创建一个审计跟踪,无论何时插入、更新或删除记录,都会进行跟踪。通过创建分部类的另一半MyEntities
并重写SaveChanges()
,我成功地实现了这一点。因此:
public override int SaveChanges(SaveOptions options)
{
var inserts = ObjectStateManager.GetObjectStateEntries(EntityState.Added).ToList();
var updates = ObjectStateManager.GetObjectStateEntries(EntityState.Modified).ToList();
var deletes = ObjectStateManager.GetObjectStateEntries(EntityState.Deleted).ToList();
...
}
对于每个插入
中的每个ObjectStateEntry
,更新
和删除
,我可以通过实体
属性获取正在修改的实体
这对于像Product
和Category
这样的常规表非常有效,但是它与ProductCategory
一起爆炸,因为实体
属性为空。我在运行时通过插入/删除的ProductCategory
的ObjectStateEntry
的公共界面到处搜寻,但找不到任何有助于我识别关键字段及其值的内容。我想得到:
- 相关表格的名称(“产品”和“类别”)
- 相关记录的键值(
和ProductID
的值)CategoryID
- 从每个表到交叉点的各个关系的名称(“类别”和“产品”)
我该怎么做?如果我做对了-你应该试试我们在这里做的(在OP的帮助下)。
我想这很接近 具体来说,我认为
ManyToManyReferences = navigationProperties.Where(np =>
np.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many &&
np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many)
.Select(np => Extensions.CreateLambdaExpression<TEntity>(np.Name))
.ToList();
ManyToManyReferences=navigationProperties.Where(np=>
np.FromEndMember.RelationshipMultiplicity==RelationshipMultiplicity.Many&&
np.ToEndMember.RelationshipMultiplicity==RelationshipMultiplicity.Many)
.Select(np=>Extensions.CreateLambdaExpression(np.Name))
.ToList();
您可能还想查看这篇文章(以及我在那里收集的其他帖子的链接),了解更多关于元数据的信息。或者搜索
IObjectContextAdapter
或此处提到的一些关键字