Asp.net mvc MVC和实体框架-插入、更新和最佳实践

Asp.net mvc MVC和实体框架-插入、更新和最佳实践,asp.net-mvc,entity-framework,reflection,Asp.net Mvc,Entity Framework,Reflection,我会尽量简短明了地回答这个问题 我们有一个使用EntityFramework4的asp.NETMVC应用程序 我们的商业模式相对简单: 我们有一个名为Photo(s)的对象(对应于一个表)。 该photos表中有一些列与对象上的属性相匹配。 描述、标题、日期等。 它还有许多列引用其他表的外键: AuthorId、LicenseId等 作者表和许可证表本身很复杂,有多个字段(标题、摘要、日期等) 我有多个客户端使用此应用程序查看他们的照片。我希望每个客户在查看照片时指定他们看到的字段,以及在编辑这

我会尽量简短明了地回答这个问题

我们有一个使用EntityFramework4的asp.NETMVC应用程序

我们的商业模式相对简单: 我们有一个名为Photo(s)的对象(对应于一个表)。 该photos表中有一些列与对象上的属性相匹配。 描述、标题、日期等。 它还有许多列引用其他表的外键: AuthorId、LicenseId等

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

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

我的想法是设置表格,告诉客户a在查看他们的照片时应该看到字段1、字段2和字段3,而客户b应该看到字段1、字段4和字段5。但其中一些字段不仅仅是主照片表中的列,它们可能是子表中的字段。因此,字段1可能是:Table.Photos.Title->,它对应的对象是:Objects.Photo.Title。。。 但字段3可能是:Table.Licenses.LicenseSummmary->,它对应的对象是:Objects.Photo.License.LicenseSummmary

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


我在寻找一个例子来说明这可能涉及到什么,我们的模型实际上比这更复杂,但这只是我们试图实现的一个想法。我不知道我所做的是否正常,也许这涉及到反思?这对我来说是一个新领域。

如果客户机定义自己的自定义字段,我只需给他们一个键/值对表

PhotoID    FK
Key        string
Value      string
Display    bool
请注意,这本质上相当于,这有其自身的一系列困难

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

PhotoID    FK
ClientID   FK
FieldName  string
Display    Bool

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

时,才将字段写入输出。客户端是否定义了自己的自定义字段?@DavidePiras-没有,我可以从中学习如何正确构造N层应用程序,但这不是我想要的。@RobertHarvey,是的,但我们以不同的方式处理这件事。更重要的是,我们有很多“标准”字段供他们选择,其中一些字段比其他字段更复杂。特别是在处理诸如安全/安全组之类的问题时。标题是关于插入和更新,问题似乎更侧重于查看。那么你想覆盖整个积垢光谱吗?无论如何,这不是小事。它需要动态构建查询,包括连接。可能更适合于文本方法,如基本DbCommands(使用Dapper?)和使用系统表获取表名和列名。即使是用于捕获查询结果的类型也不能静态定义。我感谢您的输入,这与字段的自定义关系不大——正如我所说,我们有一个过程(就像您正在做的那样)。更重要的是,我们在各种表上有许多静态db字段,我们需要能够通过编辑访问/查看并从中提取值列表。我越想,我想知道我是否应该在DB中硬编码一些内容,比如-如果他们正在编辑字段“LICENSE”,我必须在代码中特别查找,并做我们需要的事情,允许他们编辑该照片的许可证。我的想法是我们可能会在表中添加更多静态字段,我不想更新代码来处理这些字段。但也许这正是我应该做的…应该有一种方法从模型中获取字段名,这样您就可以将其与权限表匹配,并且如果您稍后添加字段,您的解决方案仍然有效。大概是这样的: