标签: self-reference

EF Code First具有多对多的自引用关系

我开始使用EF Code First和MVC,我有点难过.我有以下数据库结构(很抱歉,我不允许发布图片):

表 - 产品
表 - 相关产品

Products.ProductID上的1-Many - > RelatedProducts.ProductID
1 - Products.ProductID上的很多 - > RelatedProducts.RelatedProductID

基本上我有一个产品,可以有一系列与之相关的产品.它们保存在RelatedProducts表中,其中包含ProductID和相关产品的ProductID定义的关系,我将其命名为RelatedProductID.在我的代码中,我生成了以下类:

public class MyDBEntities : DbContext
{
    public DbSet<Product> Products { get; set; }
    public DbSet<RelatedProduct> RelatedProducts { get; set; }
}

public class Product
{
    public Guid ProductID { get; set; }
    public string Name { get; set; }
    public string Heading { get; set; }
    public string Description { get; set; }
    public decimal Price { get; set; } …
Run Code Online (Sandbox Code Playgroud)

many-to-many entity-framework-4 self-reference entity-framework-ctp5

9
推荐指数
1
解决办法
7259
查看次数

具有泛型返回类型的自引用方法,用于多个继承的类

描述可能有点困难.但是,我会试试;)

遵循流畅的样式,类的方法通常返回类实例本身(this).

public class A {

    public A doSomething() {

        // do something here

        return this;
    }

}
Run Code Online (Sandbox Code Playgroud)

当扩展这样一个流畅的样式类时,可以通过泛型类型在第一个继承步骤中相当容易地执行此操作,并将返回类型转换为超类中的此泛型类型.

public class A<T extends A<T>> {

    public T doSomething() {

        // do something here

        return (T) this;
    }

}

public class B extends A<B> {

    // an extended class of class A

}
Run Code Online (Sandbox Code Playgroud)

但是,当在这个扩展类上做另一个继承步骤时,我在尝试定义方法的泛型返回类型(在上层类中)和类描述本身时遇到了麻烦,例如,超级超级中的方法class不会返回extend类的类型,而是返回超类的类型.但是,我的意图是这些流畅的样式方法应该总是返回当前类的类型(而不是上层类).

那么可以通过利用泛型来定义解决方案吗?

PS:我知道,一个简单的解决方法可能会覆盖扩展类中的所有这些方法并将它们转换为当前类型.但是,我对更优雅的解决方案感兴趣;)

java generics inheritance self-reference

9
推荐指数
1
解决办法
6447
查看次数

class __init __(不是实例__init__)

这是我想要解决的一个非常简单的例子:

class Test(object):
    some_dict = {Test: True}
Run Code Online (Sandbox Code Playgroud)

问题是我仍然无法在定义时引用Test

通常,我只是这样做:

class Test(object):
    some_dict = {}
    def __init__(self):
        if self.__class__.some_dict == {}:
            self.__class__.some_dict = {Test: True}
Run Code Online (Sandbox Code Playgroud)

但我从来没有创建过这个类的实例.这真的只是一个容器,以便容纳一组相关的功能和数据(我有几个这些类的,我绕过它们的引用,所以这必要的测试是它自己的类)

所以我的问题是,在定义时,我怎么能引用Test,或者在定义类之后是否有类似于__init__get的内容?如果可能的话,我想self.some_dict = {Test: True}留在类定义中.到目前为止,这是我知道如何做到这一点的唯一方法:

class Test(object):
    @classmethod
    def class_init(cls):
        cls.some_dict = {Test: True}
Test.class_init()
Run Code Online (Sandbox Code Playgroud)

python initialization class self-reference

8
推荐指数
1
解决办法
545
查看次数

has_many:通过多个has_one关系?

我正在为我们的铁路教堂写一个导师计划(我仍然很喜欢铁路).

我需要对此进行建模..

contact
has_one :father, :class_name => "Contact"
has_one :mother, :class_name => "Contact"
has_many :children, :class_name => "Contact"
has_many :siblings, :through <Mother and Father>, :source => :children
Run Code Online (Sandbox Code Playgroud)

所以基本上一个对象"兄弟姐妹"需要映射父亲和母亲的所有孩子,不包括对象本身.

这可能吗?

谢谢

丹尼尔

sql many-to-many ruby-on-rails relational-database self-reference

8
推荐指数
1
解决办法
1614
查看次数

Haskell函数中的自引用

我正在学习Haskell,而Haskell Wiki上的以下表达式 让我很困惑:

fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚为什么会这样.

如果我应用标准Currying逻辑,则(zipWith (+))返回一个函数将list作为参数,然后返回另一个函数,该函数将另一个列表作为参数,并返回一个list(zipWith::(a -> b -> c) -> [a] -> [b] -> [c]).因此,fibs是对列表的引用(尚未评估),并且(tail fibs)是相同(未评估)列表的尾部.当我们尝试evaluate(take 10 fibs)时,前两个元素绑定到01.换句话说fibs==[0,1,?,?...](tail fibs)==[1,?,?,?].第一次添加完成后fibs变为[0,1,0+1,?,..].同样,在第二次添加之后我们得到了[0,1,0+1,1+(0+1),?,?..]

  • 我的逻辑是否正确?
  • 有没有更简单的方法来解释这个?(知道Haskell编译器对此代码做什么的人的任何见解?)(欢迎链接和参考)
  • 确实,这种类型的代码只能用于懒惰的评估吗?
  • 我做什么评价fibs !! 4
  • 此代码是否假设zipWith首先处理元素?(我认为不应该,但我不明白为什么不)

编辑2:我刚刚发现上述问题并在此处得到很好的解答.如果我浪费了任何人的时间,我很抱歉.

编辑:这是一个更难理解的案例(来源:Project Euler论坛):

filterAbort :: (a -> …
Run Code Online (Sandbox Code Playgroud)

recursion haskell lazy-evaluation self-reference

8
推荐指数
1
解决办法
1180
查看次数

MySQL自己的外键

我正在尝试在MySQL中创建一个自引用表,但是我似乎无法在表本身上创建外键,我收到了MySQL错误:

Error Code: 1005. Can't create table 'biological classification' (errno: 150)
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

# Table creation
DROP TABLE IF EXISTS `biological classification`;
CREATE TABLE `biological classification` (
  `idBC` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `idParent` int(11) DEFAULT NULL,
  `type` varchar(45) DEFAULT NULL,
  `value` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`idBC`),
  UNIQUE KEY `idnew_table_UNIQUE` (`idBC`),
  CONSTRAINT `SelfKey` FOREIGN KEY (`idParent`) REFERENCES `biological classification` (`idBC`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=latin1 COMMENT='A table that contains the Biological Classification …
Run Code Online (Sandbox Code Playgroud)

mysql foreign-keys self-reference

8
推荐指数
2
解决办法
1万
查看次数

关于匿名"自引用"数据结构的建议/讨论

对任何错误的术语表示歉意 - 我对计算机科学很陌生,我几乎只知道Clojure(但我想我会说我很清楚).

所以,我还没有对此做过大量的研究,但我有时发现在编写Clojure代码时能够从该数据结构中引用一些"我所处的任何数据结构的中间版本" (很像a let).快速举例:

=> (self-ish {:a 10
              :b (inc (this :a))
              :c (count (vals this))})
=> {:a 10, :b 11, :c 3}
=> (self-ish ["a" "b" (reduce str this)])
=> ["a" "b" "ab"]
//Works in any nested bits too
=> (self-ish [1 2 3 [4 5 (first this)] 6 [7 [8 (cons (second this) (nth this 3))]]])
=> [1 2 3 [4 5 1] 6 [7 [8 (2 4 5 1)]]]
Run Code Online (Sandbox Code Playgroud)

这个想法是结构逐渐建立起来,并且在任何阶段都有能力将当前的中间结构称为this.这是我当前实现的代码:

//Random straightforward …
Run Code Online (Sandbox Code Playgroud)

macros clojure self-reference

8
推荐指数
1
解决办法
379
查看次数

Python cx_Freeze名称__file__未定义

我有一个python脚本,它从互联网上获取图像,下载它,设置为桌面背景并在一分钟后更新.问题很可能是cx_Freeze不包括os模块,因为具有绝对路径的相同代码工作正常.我的代码也很完美,直到它冻结.它在我通过控制台加载,从IDLE运行或双击它之前冻结.每当我运行冻结文件时,我都会收到错误(如果我使用setup.py或cxfreeze file.py:

C:\Python33\Scripts>C:\Python33\Scripts\dist\desktopchanger.exe
Traceback (most recent call last):
  File "C:\Python33\lib\site-packages\cx_Freeze\initscripts\Console3.py", line 2
7, in <module>
    exec(code, m.__dict__)
  File "C:\Python33\desktopchanger.pyw", line 7, in <module>
    dir = path.dirname(__file__)
NameError: name '__file__' is not defined
Run Code Online (Sandbox Code Playgroud)

我的守则

import pythoncom
from urllib import request
from win32com.shell import shell, shellcon
from time import sleep
from os import path

dir = path.dirname(__file__) #get dierctory script is in
startpath = str(path.join(dir+'/bg/bg.jpg')) #add /bg/bg.jpg to path of script

pathtoimg=[]
for char in startpath:
    if char != "/": …
Run Code Online (Sandbox Code Playgroud)

python python-module setup.py cx-freeze self-reference

8
推荐指数
1
解决办法
6032
查看次数

实体框架代码优先:如何映射多个自引用多对多关系

我创建了一个实体类型,它具有多个引用相同类型项的集合属性.换句话说,它反映了单个数据库表,其中行被任意分组,使得行可以出现在多个组中.

在下面的简化示例中,Person类有BrothersSisters集合属性也引用Person实体:

public class Person
{
    public Person()
    {
        Brothers = new Collection<Person>();
        Sisters = new Collection<Person>();
    }

    [Key]
    public string Name { get; set; }

    public int Age { get; set; }

    public virtual ICollection<Person> Brothers { get; set; } 

    public virtual ICollection<Person> Sisters { get; set; } 
}
Run Code Online (Sandbox Code Playgroud)

实体框架似乎认为这是一个有效的模型,但是将其解释为创建单个PersonPersons连接表,这无法反映兄弟姐妹关系的分离.

我假设解决方案是使用流畅的API为两个关系显式映射单独的连接表,但是,尽管经过了大量的实验,我仍然无法使其工作.

有什么建议吗?

蒂姆,谢谢

many-to-many entity-framework code-first self-reference

8
推荐指数
1
解决办法
3856
查看次数

Const自引用结构

我在用C写作

我已经定义了一个由自引用结构组成的新类型(noFunc_menuEntry).

struct noFunc_menuEntry_tag {
    const char *text;
    struct noFunc_menuEntry_tag *up_entry;
    struct noFunc_menuEntry_tag *down_entry;
    struct noFunc_menuEntry_tag *back_entry;
    struct noFunc_menuEntry_tag *enter_entry;
};
typedef struct noFunc_menuEntry_tag noFunc_menuEntry;
Run Code Online (Sandbox Code Playgroud)

我需要定义一系列变量,如下所示:

menuEntry_1 = {title_1, &menuEntry_2, &menuEntry_4, &menuEntry_1, &menuEntry_5};
menuEntry_2 = {title_2, &menuEntry_3, &menuEntry_1, &menuEntry_1, &menuEntry_6};
Run Code Online (Sandbox Code Playgroud)

等等.

所以我需要分离变量的声明和定义,因为每个变量都依赖于其他变量.在头文件中,我写了声明

noFunc_menuEntry menuEntry_1, menuEntry_2, menuEntry_3, menuEntry_4, menuEntry_5, menuEntry_6;
Run Code Online (Sandbox Code Playgroud)

etc ...,并在函数中的.c文件中初始化变量:

void menu_init(void)
{
        menuEntry_1.text = title;
        menuEntry_1.up_entry = &menuEntry_2
}
Run Code Online (Sandbox Code Playgroud)

等等其他成员和变量.

但是我希望我的变量是const:

const noFunc_menuEntry menuEntry_1, menuEntry_2, menuEntry_3, menuEntry_4, menuEntry_5, menuEntry_6;
Run Code Online (Sandbox Code Playgroud)

所以我的问题是关于separing声明和const我定义的类型变量的定义.我能怎么做?难道我做错了什么?

当然,如果我只是添加const声明,编译器在初始化变量时报告错误(我正在尝试编写只读变量).

c struct const self-reference

8
推荐指数
2
解决办法
249
查看次数