如何在EF中提取实体属性列映射

时间:2012-06-15 08:41:28

标签: entity-framework

我一直在寻找答案的年龄。虽然我看过很多类似的帖子,但他们似乎都回答“你需要直接从XML中读取映射数据”,但我看不到如何做到这一点的例子。

我正在使用EF 4.1,数据库优先和Dbcontext。我正在尝试实现审计过程,这是通过在我的自定义上下文中覆盖SaveChanges来完成的。我查询状态管理器以撤回已修改的记录等。所有标准内容和许多好例子都在那里。

但是,我想写入数据库中的单个审计表,该表具有要更改的列名和列所属的表名。目前我只是将列记录的实体属性名称和实体类型写入表记录。确定这有效,但它并不严格正确,因为我应该编写映射的列/表名而不是概念表示。到目前为止,我所有的entites使用精确映射,即它们与数据库名称相同。但是,如果开发人员有一天从新表创建实体并为映射指定不同的名称,则我的审核将不正确。我将有一个列名的审计细节,例如不存在!此外,我知道您可以将实体映射到多个表。所以这就是我想要理想的做法:

在实体属性级别,我想找出数据库中的列名和它所属的表名(包括完整的模式 - 即表MySchema.MyTable我想写入审计表MySchema。 MyTable不只是MyTable)。此过程将保护审核过程,从开发人员编辑映射名称,或从多个表等创建实体。

所有示例都说您需要使用CSSpace数据集,因为它包含从数据存储(SSpace)到Conceptual存储(CSpace)的关系信息。但这显然是在内部使用的,无法通过metadataworkspace API进行访问。相反,我应该直接读取CSSpace的XML吗?如果是这样,这个文件在哪里(嵌入到程序集中?),我该如何阅读?我认为我想要做的是非常基本和明显的要求,但这似乎太难了。

任何帮助都非常感谢!

1 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,模型的XML就是模型文件 - 如果您右键单击模型并选择“打开方式 - XML编辑器”,您就可以看到它。