SubSonic不生成MySql外键表

时间:2009-06-05 14:34:01

标签: mysql foreign-keys subsonic

MySql 5.1.34数据库中的两个表。当使用SubSonic生成DAL时,外键关系不会被编写脚本,即;我没有Parent.ChildCollection对象。查看生成的DAL Parent类内部显示以下内容;

//no foreign key tables defined (0)

我尝试过SubSonic 2.1和2.2,以及各种MySql 5版本。我必须在程序上做错事 - 任何帮助都会非常感激。在使用MS-SQL时,这始终只是“开箱即用”。

TABLE `parent` (
  `ParentId` INT(11) NOT NULL AUTO_INCREMENT,
  `SomeData` VARCHAR(25) DEFAULT NULL,
  PRIMARY KEY (`ParentId`)
) ENGINE=INNODB DEFAULT CHARSET=latin1;

TABLE `child` (
  `ChildId` INT(11) NOT NULL AUTO_INCREMENT,
  `ParentId` INT(11) NOT NULL,
  `SomeData` VARCHAR(25) DEFAULT NULL,
  PRIMARY KEY (`ChildId`),
  KEY `FK_child` (`ParentId`),
  CONSTRAINT `FK_child` FOREIGN KEY (`ParentId`) REFERENCES `parent` (`ParentId`)
) ENGINE=INNODB DEFAULT CHARSET=latin1;

3 个答案:

答案 0 :(得分:2)

使用此设置对我有用。

  <add name="ProviderName"
       type="SubSonic.MySqlInnoDBDataProvider, SubSonic"
       connectionStringName="ConnectionString"
       generateLazyLoads="true"
       generatedNamespace="My.NameSpace"
       generateRelatedTablesAsProperties="true"
       tableBaseClass="ActiveRecord" />

Subsonic 2.2和MySql 5.1.30。 您还应该检查两个表是否都是MyISAM。

你刚刚创建了这个外键吗?然后,Subsonic可能没有注意到你的更改,因为MySQL似乎缓存了Tableschema。请参阅:http://code.google.com/p/subsonicproject/issues/detail?id=87

答案 1 :(得分:0)

我不是亚音速专家,但我想知道在你的语法中是否存在技术上违反一条规则的问题,这可能会使亚音速混乱:根据MySQL's reference

  

如果给出CONSTRAINT symbol子句,则符号值在数据库中必须是唯一的。

你正在命名CONSTRAINTKEY索引FK_Child - 直觉上这是有道理的,毫无疑问MySQL和InnoDB很满意它,但也许是亚音速的解析这个限制不同且更具限制性。如果重命名约束以避免名称与密钥索引之间存在技术“冲突”,会发生什么?

答案 2 :(得分:0)

  1. 使用InnoDB表
  2. 使用SubSonic。 MySqlInnoDBDataProvider 而不是SubSonic。 MySqlDataProvider !! (否则亚音速会默默地忽略你的FK)
  3. 定义表的主键(不需要是唯一的)
  4. 请确保,您的表已定义了FK(如果您错误地设置了数据库或表,mysql将默认忽略FK创建,主要是由于第1点。)使用:show create table以确保
  5. 希望这会有所帮助...