SubSonic isn't generating MySql foreign key tables

你说的曾经没有我的故事 提交于 2019-12-24 08:24:00

问题


I two tables within a MySql 5.1.34 database. When using SubSonic to generate the DAL, the foreign-key relationship doesn't get scripted, ie; I have no Parent.ChildCollection object. Looking inside the generated DAL Parent class shows the following;

//no foreign key tables defined (0)

I have tried SubSonic 2.1 and 2.2, and various MySql 5 versions. I must be doing something wrong procedurally - any help would be greatly appreciated. This has always just worked 'out-the-box' when using 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;

回答1:


It works for me with this settings.

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

Subsonic 2.2 and MySql 5.1.30. You should also check if both tables are MyISAM.

And did you just create this foreign key? Then it's likely that Subsonic doesn't notice your changes, because MySQL seems to cache the Tableschema. See: http://code.google.com/p/subsonicproject/issues/detail?id=87




回答2:


  1. use InnoDB tables
  2. use SubSonic.MySqlInnoDBDataProvider instead of SubSonic.MySqlDataProvider !! (otherwise subsonic will silently ignore your FKs)
  3. define primary key for your tables (don't need to be unique)
  4. be sure, that your table has FKs defined (mysql silently ignores FK creation if you have incorrectly setup your db or table, mainly due to point 1.) use: show create table to be sure

hope this helps...




回答3:


I'm no subsonic expert, but I wonder if there may be a technical violation of one rule, in your syntax, that perhaps confuses subsonic: according to MySQL's reference,

If the CONSTRAINT symbol clause is given, the symbol value must be unique in the database.

You're naming both the CONSTRAINT and the KEY index FK_Child -- intuitively that makes sense and no doubt MySQL and InnoDB are happy with it, but maybe subsonic's parsing that restriction differently and more restrictively. What happens if you rename the constraint to avoid the technical "conflict" of names between it and the key index?



来源:https://stackoverflow.com/questions/956191/subsonic-isnt-generating-mysql-foreign-key-tables

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!