【问题标题】:SubSonic isn't generating MySql foreign key tablesSubSonic 没有生成 MySql 外键表
【发布时间】:2009-06-05 14:34:01
【问题描述】:

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;

【问题讨论】:

    标签: mysql foreign-keys subsonic


    【解决方案1】:

    这个设置对我有用。

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

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

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

    【讨论】:

    • 大功告成——非常感谢!我用谷歌搜索了配置,但没有遇到 generateRelatedTablesAsProperties 参数。很有用,ta。
    • np,但 generateRelatedTablesAsProperties="true" 首先不应该是问题。它基本上会将公共方法“Product.GetOrders()”变成公共属性“Product.Orders”
    【解决方案2】:
    1. 使用 InnoDB 表
    2. 使用 SubSonic.MySqlInnoDBDataProvider 而不是 SubSonic.MySqlDataProvider !! (否则亚音速会默默地忽略你的 FK)
    3. 为您的表定义主键(不必是唯一的)
    4. 请确保您的表已定义 FK(如果您错误地设置了您的数据库或表,mysql 会默默地忽略 FK 创建,主要是由于第 1 点。)使用:show create table to be sure

    希望这会有所帮助...

    【讨论】:

    • 这个人完成了这项工作。
    【解决方案3】:

    我不是亚音速专家,但我想知道在您的语法中是否存在技术违规,这可能会使亚音速混淆:根据MySQL's reference

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

    您将CONSTRAINTKEY 索引命名为FK_Child ——直觉上这是有道理的,毫无疑问,MySQL 和 InnoDB 对此感到满意,但也许 subsonic 以不同方式和更严格地解析该限制。如果重命名约束以避免它与键索引之间的名称技术“冲突”,会发生什么情况?

    【讨论】:

    • Alex,非常感谢您的快速回复。我没有想到这一点。我已重命名约束和键以及“ParentId”引用,但不幸的是问题仍然存在。
    • Aw:-(。嗯,值得一试...抱歉,我不知道还有什么建议!
    猜你喜欢
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 2012-09-04
    • 1970-01-01
    相关资源
    最近更新 更多