私が働いている会社では、データオブジェクトモデルに Fluent NHibernate を使用しています。数日前、Fluent NHibernate がモデルにもマッピングにも存在しない余分な列を生成するという問題が発生しました。状況は次のとおりです。
私のモデル: FirstClass.cs
public class FirstClass
{
public virtual int Id { get; private set; }
public virtual SecondClass MyReference { get; set; }
public virtual DateTime DecisionDate { get; set; }
}
私のマッピング:
public class FirstClassMap : ClassMap<FirstClass>
{
public FirstClassMap()
{
Id(x => x.Id);
Map(x => x.DecisionDate);
References(x => x.MyReference);
}
}
次のコードでスキーマを構築した後、
Instance._sessionFactory = Fluently.Configure()
.Database(MySQLConfiguration.Standard
.ConnectionString(connectionString)
.ShowSql())
.ExposeConfiguration(c =>
{
c.Properties.Add("current_session_context_class", ConfigurationHelper.getSetting("SessionContext"));
})
.ExposeConfiguration(BuildSchema)
.Mappings( m => m.FluentMappings.AddFromAssemblyOf<Community>())
.BuildSessionFactory();
「SecondClass_id」という名前の追加の列が生成され、Id 列を持つ SecondClass テーブルへのインデックスと外部キーが作成されます。生成されたテーブルは次のとおりです。
CREATE TABLE `FirstClass` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`DecisionDate` datetime DEFAULT NULL,
`MyReference_id` int(11) DEFAULT NULL,
`SecondClass_id` int(11) DEFAULT NULL,
PRIMARY KEY (`Id`),
KEY `MyReference_id` (`MyReference_id`),
KEY `SecondClass_id` (`SecondClass_id`),
CONSTRAINT `FK4AFFB59B2540756F` FOREIGN KEY (`MyReference_id`) REFERENCES `SecondClass` (`Id`),
CONSTRAINT `FK4AFFB59B51EFB484` FOREIGN KEY (`SecondClass_id`) REFERENCES `SecondClass` (`Id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
「MyReference」の名前を「SecondClass」(クラス タイプと同じ名前) に変更すると、余分な列が作成されないことがわかりました。しかし、クラス名ではなく、指定した名前でプロパティを使用したいと考えています。その余分な列が作成されるのはなぜですか? どうすれば修正できますか?余分な外部キー列をぶら下げたくありません。