我会尽量简短明白这个问题。
我们有一个使用实体框架4的asp.net mvc应用程序。
我们的商业模式相对简单: 我们有一个名为Photo(s)的对象(对应于一个表)。 照片表中有一些列与对象的属性相匹配。 描述,标题,日期等 它还有一些引用其他表的外键的列: AuthorId,LicenseId等......
作者和许可证表格本身很复杂,有多个字段(标题,摘要,日期等)。
我有多个客户使用此应用程序查看他们的照片。我希望每个客户能够决定他们在查看照片时看到的字段,以及他们在编辑这些字段时看到的字段。
我的想法是让表格设置说客户端-a在查看照片时应该看到Field1,Field2和Field3 - 而client-b应该看到Field1,Field4和Field5。但是其中一些字段不仅仅是主照片表中的列,它们可能是子表中的字段。所以Field1可能是:Table.Photos.Title - >它对应一个对象:Objects.Photo.title ... 但Field3可能是:Table.Licenses.LicenseSummary - >它对应于一个对象:Objects.Photo.License.LicenseSummary
我正在试图找出我们用来建立一个非常数据驱动的环境的方法,所以在数据库中我可以说,显示这个对象/属性(用于查看或编辑)然后它会知道如何映射到任何需要提取信息的表格。另外,在编辑过程中......如果它是属性类型,而不仅仅是文本字段,请给它一些方法来提取可用值列表。
我正在寻找一个可能涉及的例子,我们的模型实际上比这更复杂,但这只是我们想要实现的目标。我不知道我想做的事情是否正常,或许它涉及到反思?这对我来说是个新领域。
答案 0 :(得分:0)
如果客户端正在定义自己的自定义字段,我只需给它们一个键/值对表。
PhotoID FK
Key string
Value string
Display bool
请注意,这基本上等于EAV,它带来了一系列困难。
如果只是关于现有字段的权限,则需要捕获该信息:
PhotoID FK
ClientID FK
FieldName string
Display Bool
您可以使用此信息禁止在视图中显示字段。最简单的方法是在视图中使用循环,只有在Display
设置为true
时才将字段写入输出。