MVC和实体框架 - 插入,更新,最佳实践

时间:2013-03-27 16:10:19

标签: asp.net-mvc entity-framework reflection

我会尽量简短明白这个问题。

我们有一个使用实体框架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

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

我正在寻找一个可能涉及的例子,我们的模型实际上比这更复杂,但这只是我们想要实现的目标。我不知道我想做的事情是否正常,或许它涉及到反思?这对我来说是个新领域。

1 个答案:

答案 0 :(得分:0)

如果客户端正在定义自己的自定义字段,我只需给它们一个键/值对表。

PhotoID    FK
Key        string
Value      string
Display    bool

请注意,这基本上等于EAV,它带来了一系列困难。

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

PhotoID    FK
ClientID   FK
FieldName  string
Display    Bool

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