レガシーテーブルを使用するには、2つのchar(3)フィールドに基づいてCompositeIdを作成する必要があります。Fluentでこれを可能にする過負荷は見られません。
私が試みているマッピングは次のようになります。
CompositeId()
.KeyProperty(x => x.LegacyEntity1Id, "LegacyEntity1Id")
.KeyProperty(x => x.LegacyEntity2Id, "LegacyEntity2Id");
Map(x => x.LegacyEntity1Id).CustomSqlType("char(3)");
Map(x => x.LegacyEntity2Id).CustomSqlType("char(3)");
私も試しました:
CompositeId()
.KeyReference(x => x.LegacyEntity1, "LegacyEntity1Id")
.KeyReference(x => x.LegacyEntity2, "LegacyEntity2Id");
Map(x => x.LegacyEntity1Id).CustomSqlType("char(3)");
Map(x => x.LegacyEntity2Id).CustomSqlType("char(3)");
どちらも同じ結果になります。テーブルは適切な複合IDで生成されますが、両方の列がデフォルトのnvarchar(255)です。その結果、親テーブルがchar(3)であるため、外部キーの生成に失敗し、例外が発生します。
Fluent経由でマッピングすることはできませんか?
そうでない場合は、次のようにマッピングすることに実際の違いはありますか?*:
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.LegacityEntity1Id).CustomSqlType("char(3)");
Map(x => x.LegacityEntity2Id).CustomSqlType("char(3)");
References(x => x.LegacityEntity1).Column("LegacityEntity1Id").UniqueKey("1").Not.Nullable();
References(x => x.LegacityEntity2).Column("LegacityEntity2Id").UniqueKey("1").Not.Nullable();
*レガシーテーブルはローカルSQLインスタンスにETLされているため、テーブルをわずかに変更することができます(IDを追加するのに十分です)。
または、別の代替アプローチがありますか?この場合、HasManyToManyを使用することはできません。これは、その価値があるためです(ペイロードがあります)。