如何用C#表示MySQL数据库模式?

Tob*_*obi 5 c# mysql

标题不是那么准确,但我无法想出更好的标题.

我正在尝试为MS的Forefront Identity Manager编写MySQL连接器(FIM基本上是一个同步引擎,它使用元目录同步各种数据源之间的身份).但是我很难找到合适的设计.

假设我想将数据库中的用户数据导入到FIM的metaverse中.用户对象具有各种属性,如firstname,lastname,address等.在数据库中,这些属性可以在多个表之间分配.FIM最终需要将这些属性合并到一个对象中.因此,用户需要配置连接器以告诉它数据如何存储在数据库中.

我想知道什么是代表这种配置的"最佳"方式.有两种选择(我的):

  1. 我可以保存一个合并/连接数据的选择查询,这样结果就是一个包含所有所需属性的"表".这个问题是我认为我必须对这个查询字符串进行某种解析来创建一个fim兼容的模式(它基本上是对象类型的名称(fe"person")和属性列表).这个模式需要可以单独从查询字符串创建而不实际执行查询(我可以执行一些假查询,如果这样可以简化过程).
  2. 我可以创建一些类来表示数据库模式,即表和关系.由于我不熟悉MySQL(或根本就没有数据库),我冒着错过一些特殊情况的风险.此外,它可能是某种矫枉过正,因为一旦配置了架构,就可以假设它是固定的.

有没有人对选择哪种替代方案以及如何解决随之而来的问题有相同的建议?或者还有另一个 - 更好 - 替代我没想到的?任何建议将不胜感激!如果不清楚,请告诉我.

编辑:由于对用例有一些问题,我将详细说明:

正如我所说,我正在为FIM开发管理代理.FIM提供了一个所谓的可扩展连接管理代理,它基本上是一个实现一些接口的单一类.(有关示例实现,请参阅此technet指南).

由于我想开发一个用于管理MySQL数据库中的身份的通用代理,我不知道编译时的数据库布局.当最终用户想要使用管理代理时,他需要决定他想要管理的身份的哪些属性.所以我需要给用户一些配置管理代理的方法.我的主要问题是,如何设计类以保存此配置.

让我们看一个简单的例子:

假设您想要管理员工身份.为了简单起见,我们有三个属性:

  • 名字
  • 部门

在这个示例中,它可能只是一个包含4列的单个表(属性加上一个id).但它也可能是更好的设计,它使用两个表,一个用户表和一个部门表,使用1:1关系来定义用户部门.

FIM要求我在一个对象中合并这些属性.它提供了一个CSEntryChange具有AttributeChanges集合成员的类.然后我会创建一些实例AttributeChange(基本上包含属性名称和它的值)并将它们添加到集合中.因此,用户可编辑的配置必须告诉管理代理如何从db获取具有所有已定义属性的用户以及如何在该数据库中创建和修改用户.

理想情况下,我有一些"MySQLSchema"类(由用户预先配置),可以返回一个List<CSEntryChange>(我实际上不会CSEntryChange为了解耦而使用该类,但是你应该得到点)包含db中的所有用户(分页可能是一个要求,但我可以稍后解决).此外,我希望能够传递它,CSEntryChange这将导致更新相应的数据库条目(或者如果尚未存在则创建).

我希望这清楚一点:)

Aby*_*Aby 1

您可以将 NHibernate 与 MySQL 一起使用,并且 NHibernate 是一个功能齐全的 ORM,其中 C# 类与您的 MySQL 表进行映射,一旦您掌握了 NHibernate 的窍门,其余的将变得轻而易举。

这里有一个示例供您参考。 http://www.codeproject.com/Articles/26123/NHibernate-and-MySQL-A-simple-example