使用旧表时,需要基于两个 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();
* 我确实有能力稍微修改表(足以添加身份),因为旧表正在 ETL 到本地 SQL 实例中。
还是有另一种替代方法?在这种情况下,不能使用 HasManyToMany,因为它的价值(将有一个有效负载)。