Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用同一端点/控制器的多个实体类型_C#_Asp.net Mvc 4_Asp.net Web Api_Asp.net Mvc Routing_Ravendb - Fatal编程技术网

C# 使用同一端点/控制器的多个实体类型

C# 使用同一端点/控制器的多个实体类型,c#,asp.net-mvc-4,asp.net-web-api,asp.net-mvc-routing,ravendb,C#,Asp.net Mvc 4,Asp.net Web Api,Asp.net Mvc Routing,Ravendb,我在应用程序中使用RavenDB,默认情况下,文档的id如下所示: homes/1 其中homes是类Home的集合类型名称。如果我创建一个名为Blog的新类,我将得到一个id,如: blogs/1 现在,Home和Blog都是我的CMS中的页面,我希望homes/1和blogs/1都使用PageController。因此,是否可以使用约束或类似的东西来实现这一点,因为只有继承特定类的类型才由PageController端点处理很重要?您有两个不同的选项 如果它是一个页面控制器,并且用户

我在应用程序中使用RavenDB,默认情况下,文档的id如下所示:

homes/1 
其中
homes
是类
Home
的集合类型名称。如果我创建一个名为
Blog
的新类,我将得到一个id,如:

blogs/1 

现在,
Home
Blog
都是我的CMS中的页面,我希望
homes/1
blogs/1
都使用
PageController
。因此,是否可以使用约束或类似的东西来实现这一点,因为只有继承特定类的类型才由
PageController
端点处理很重要?

您有两个不同的选项

如果它是一个
页面控制器
,并且用户正在执行创建和编辑页面之类的对象,那么
主页
博客
可能不应该有两种单独的实体类型。应该有一个
页面
类。它可以有一个
PageType
属性来区分它们,但它们可能不需要是单独的对象。如果采用这种方法,RavenDB中的文档将具有键
pages/1


如果有明显不同的字段,那么可能您确实有一个
Home
Blog
类,但是它们都应该从
页面
类继承,并且任何共同属性都应该在那里。如果您采用这种方法,您仍然可以在RavenDB中获得带有键的文档,如
homes/1
blogs/1
。您可能想看看RavenDB中的多态性。使用这种方法,您可能仍然需要一个
PagesController
,或者您可能需要单独的
HomePagesController
BlogPagesController
,具体取决于您的需要。

实体类型my上的字段差别很大。我同意你的观点,我认为最好的解决方案是为每个
类型
创建一个
控制器
,这在我创建所有类的正常情况下都会起作用。在本例中,我创建了
Page
类和一个多映射索引,该索引对继承
Page
的所有类型进行索引。另一个开发人员使用my CMS创建站点,创建
主页
博客
类。在我的CMS的UI中,内容编辑器应该能够编辑和保存所有
主页
s、
博客
s等。因此,我认为我需要为所有页面设置一个
页面控制器
。因此,您是否遇到了一个与您当前的方法不兼容的特定问题?如果我使用带破折号的标识策略而不是正斜杠,它会起作用,因为这样我最终会得到像page/homes-1这样的URL,这非常有效。我问这个问题的原因之一是因为我正在尝试实现像这样的文档草稿homes/1/draft,但我想homes-1-draft可以很好地工作,尽管它看起来没有那么好。但是您知道,如果扩展我的
页面
类并向其添加更多字段,我在保存时会遇到问题,因为没有
控制器
处理您创建的
类型