2

我会尽量简短而清楚地回答这个问题。

我们有一个使用实体框架 4 的 asp.net mvc 应用程序。

我们的业务模型相对简单:我们有一个名为 Photo(s) 的对象(对应于一张表)。该照片表有一些与对象的属性相匹配的列。描述、标题、日期等。它还有一些引用其他表的外键的列:AuthorId、LicenseId 等...

作者和许可证表本身就很复杂,有多个字段(标题、摘要、日期等)

我有多个客户使用此应用程序查看他们的照片。我希望每个客户都指定他们在查看照片时看到的字段,以及他们在编辑这些字段时看到的字段。

我的想法是设置表格,说明客户端 A 在查看照片时应该看到 Field1、Field2 和 Field3,而客户端 B 应该看到 Field1、Field4 和 Field5。但是其中一些字段不仅仅是主照片表中的列,它们可能是子表中的字段。所以 Field1 可能是:Table.Photos.Title -> 对应于对象:Objects.Photo.title... 但 Field3 可能是:Table.Licenses.LicenseSummary -> 对应于对象:Objects.Photo。 License.LicenseSummary

我试图找出我们将使用的方法来拥有一个非常数据驱动的环境,所以我可以说在数据库中显示这个对象/属性(用于查看或编辑),然后它会知道如何映射到任何表它需要提取这些信息。此外,在编辑过程中......如果它是那种类型的属性,而不仅仅是一个文本字段,请给它一些方法来提取可用值的列表。

我正在寻找这可能涉及的示例,我们的模型实际上比这更复杂,但这只是我们试图完成的一个想法。我不知道我正在尝试做的事情是否正常,也许它涉及反思?这对我来说是一个新领域。

4

1 回答 1

0

如果客户正在定义他们自己的自定义字段,我会简单地给他们一个键/值对表。

PhotoID    FK
Key        string
Value      string
Display    bool

请注意,这基本上相当于EAV,它有自己的一系列困难。

如果只是关于现有字段的权限,则需要捕获该信息:

PhotoID    FK
ClientID   FK
FieldName  string
Display    Bool

您可以使用此信息来禁止在视图中显示字段。Display最简单的方法是在视图本身中使用循环,仅当设置为时才将字段写入输出true

于 2013-03-27T16:14:37.787 回答