使用遺留表需要基於兩個char(3)字段創建CompositeId。沒有看到任何使Fluent可以實現的重載。可能使用CompositeId的CustomSqlType?
映射我試圖看起來像這樣:
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();
*我有稍微修改表(足以增加一個身份),因爲傳統的表是能力被ETLed到本地SQL實例中。
或者還有另一種方法嗎?在這種情況下,不能使用HasManyToMany,因爲它值得(將有一個有效載荷)。
引用的實體已經指定其類型,如CustomSqlType( 「CHAR(3)」)。在這種情況下,我不能使用普通長度(3),因爲我不想使用nvarchar,但是使用char。 – heyseuss 2012-07-18 12:28:26
很奇怪。我必須調查 – Firo 2012-07-18 13:30:28