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;
答案 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
子句,则符号值在数据库中必须是唯一的。
你正在命名CONSTRAINT
和KEY
索引FK_Child
- 直觉上这是有道理的,毫无疑问MySQL和InnoDB很满意它,但也许是亚音速的解析这个限制不同且更具限制性。如果重命名约束以避免名称与密钥索引之间存在技术“冲突”,会发生什么?
答案 2 :(得分:0)
希望这会有所帮助...