Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.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# 实体框架中RubyonRails多态关联的等价物_C#_Ruby On Rails_Entity Framework_Polymorphic Associations - Fatal编程技术网

C# 实体框架中RubyonRails多态关联的等价物

C# 实体框架中RubyonRails多态关联的等价物,c#,ruby-on-rails,entity-framework,polymorphic-associations,C#,Ruby On Rails,Entity Framework,Polymorphic Associations,在我的asp应用程序中,我想使用RubyonRails在实体框架中的活动记录。 我知道StackOverflow上已经有一些主题在讨论这一点,但我想在不使用继承的情况下实现它,因为它可以在RubyonRails中实现,所以我想问一下这是否可能 多谢各位 RubyonRails通过定义类型和键来实现这个模式。正如您引用的链接中所述: 为了实现这一点,您需要在声明多态接口的模型中声明外键列和类型列 在规范关系数据库中,这永远不能实现为外键约束,因为一个外键字段只能引用一个主键字段。因此,RoR中的多

在我的asp应用程序中,我想使用RubyonRails在实体框架中的活动记录。
我知道StackOverflow上已经有一些主题在讨论这一点,但我想在不使用继承的情况下实现它,因为它可以在RubyonRails中实现,所以我想问一下这是否可能


多谢各位

RubyonRails通过定义类型和键来实现这个模式。正如您引用的链接中所述:

为了实现这一点,您需要在声明多态接口的模型中声明外键列和类型列

在规范关系数据库中,这永远不能实现为外键约束,因为一个外键字段只能引用一个主键字段。因此,RoR中的多态关联可能只是作为“软”外键实现的


这就是为什么不能在EF中完全像在RoR中一样完成这项工作的原因。与外键相同,关联只能引用另一个实体。但是,您可以创建继承类,每个继承类都可以引用自己的实体。这就是为什么在使用EF实现这些关联时,您只能找到继承的示例。另一个例子是我的问题。

我有很多使用实体框架进行适当多态关联(即由接口定义的关联,而不是由抽象类型定义的关联)的经验。我认为这种模式对于良好的对象建模是必不可少的,我已经斥责过EF开发团队好几次,说他们缺乏对这种模式的本机支持,我认为这种模式很容易添加(本机支持包括在LINQ to Entite中查询那些关联的能力,就像在LINQ to Objects中一样)

在我的实现中,您必须持有一个“复合键”,该键定义了关联对象的类型和标识——我相信,在Hibernate和RoR中都是这样做的。导航关系是在代码中完成的,方法是读取此键,然后动态创建用于访问相应类型实例的方法


虽然不能将此复合键设置为FK,但可以使用“两个半表模式”添加引用完整性,只需稍微多做一些工作。我已经在裸体对象开发手册中详细介绍了这一点,您可以在GitHub上查看。但是,这些模式并不依赖于裸对象框架,您可以复制它们。所有的源代码都在那里(请参阅NakedObjects.Helpers中的类PolymorphicNavigator)。

继@richard pawson的回答之后,我将“两部分表”模式从实体框架移植到Java(JDO/DataNucleus),并提供了一个完整的示例


你应该可以用它在.NET领域中找到类似的东西。

谢谢@Gert的回答,我原以为我们会像你说的那样,但我想尝试一下。在我的例子中,我无法创建继承类,因为这两个现有类没有共同点,或者只有一点点,引入继承会破坏我的应用程序的其他部分,所以我可能会使用两个可选外键,其中一个将为null,另一个将指向object,反之亦然,“我想在不使用继承的情况下实现它,因为它在RubyonRails中是可以实现的”-你的确切意思是什么?不清楚。