SubSonic не генерирует таблицы внешних ключей MySql - PullRequest
0 голосов
/ 05 июня 2009

Я две таблицы в базе данных MySql 5.1.34. При использовании SubSonic для генерации DAL отношение внешнего ключа не записывается в сценарий, т.е. У меня нет объекта Parent.ChildCollection. Просмотр созданного родительского класса DAL показывает следующее:

//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 ]

2 голосов
/ 05 июня 2009

У меня работает с этими настройками.

  <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

0 голосов
/ 30 октября 2009
  1. использовать таблицы InnoDB
  2. использовать SubSonic. MySqlInnoDBDataProvider вместо SubSonic. MySqlDataProvider !! (в противном случае дозвуковой будет тихо игнорировать ваши FKs)
  3. определить первичный ключ для ваших таблиц (не обязательно должен быть уникальным)
  4. убедитесь, что в вашей таблице определены FK (mysql молча игнорирует создание FK, если вы неправильно настроили свою базу данных или таблицу, в основном из-за пункта 1.) используйте: для уверенности покажите create table

надеюсь, это поможет ...

0 голосов
/ 05 июня 2009

Я не эксперт по дозвуку, но мне интересно, может ли быть техническое нарушение одного правила в вашем синтаксисе, которое, возможно, смущает дозвуковое: в соответствии с ссылкой MySQL ,

Если задано предложение CONSTRAINT symbol, значение символа должно быть уникальным в базе данных.

Вы называете как CONSTRAINT, так и KEY index FK_Child - интуитивно, что имеет смысл, и, без сомнения, MySQL и InnoDB довольны этим, но, возможно, Subsonic анализирует это ограничение по-другому и более ограничительно. Что произойдет, если вы переименуете ограничение, чтобы избежать технического «конфликта» имен между ним и индексом ключа?

...