This question is locked. New answers and comments are not allowed.
I am having an issue with the fluent mapping for a composite key:
Database structure:
Database structure:
TABLE `Contact` ( `ContactId` int(11) NOT NULL AUTO_INCREMENT, `FirstName` varchar(50) CHARACTER SET utf8mb4 NOT NULL, `LastName` varchar(50) CHARACTER SET utf8mb4 NOT NULL, `Suffix` varchar(6) DEFAULT NULL, `EmailAddress` varchar(100) CHARACTER SET utf8mb4 DEFAULT NULL, `IsPlantManager` tinyint(3) unsigned NOT NULL, `IsActive` tinyint(3) unsigned NOT NULL, PRIMARY KEY (`ContactId`)) ;`Site` ( `SiteId` int(11) NOT NULL AUTO_INCREMENT, `SiteCode` varchar(10) CHARACTER SET utf8mb4 NOT NULL, `SiteName` varchar(255) CHARACTER SET utf8mb4 NOT NULL, `AddressId` int(11) NOT NULL, `BusinessId` int(11) DEFAULT NULL, `TotalUsers` int(11) DEFAULT NULL, `AdContainer` longtext, `SapLocation` varchar(100) CHARACTER SET utf8mb4 DEFAULT NULL, `Ldap` longtext, `SapCode` varchar(10) CHARACTER SET utf8mb4 DEFAULT NULL, `PrinterCode` varchar(6) CHARACTER SET utf8mb4 DEFAULT NULL, `ZoneId` int(11) DEFAULT NULL, PRIMARY KEY (`SiteId`), UNIQUE KEY `SiteCode_UNIQUE` (`SiteCode`), KEY `FK_Site_Address` (`AddressId`), KEY `FK_Site_BusinessGroup` (`BusinessId`), KEY `FK_Zone_Site_idx` (`ZoneId`), CONSTRAINT `FK_Site_Address` FOREIGN KEY (`AddressId`) REFERENCES `address` (`AddressId`) ON DELETE NO ACTION ON UPDATE CASCADE, CONSTRAINT `FK_Site_BusinessGroup` FOREIGN KEY (`BusinessId`) REFERENCES `businessgroup` (`BusinessId`) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT `FK_Zone_Site` FOREIGN KEY (`ZoneId`) REFERENCES `zone` (`ZoneId`) ON DELETE SET NULL ON UPDATE CASCADE);`SiteContact` ( `ContactId` int(11) NOT NULL, `SiteId` int(11) NOT NULL, PRIMARY KEY (`ContactId`,`SiteId`), KEY `FK_Site_SiteContact_idx` (`SiteId`), CONSTRAINT `FK_Contact_SiteContact` FOREIGN KEY (`ContactId`) REFERENCES `contact` (`ContactId`) ON DELETE NO ACTION ON UPDATE CASCADE, CONSTRAINT `FK_Site_SiteContact` FOREIGN KEY (`SiteId`) REFERENCES `site` (`SiteId`) ON DELETE NO ACTION ON UPDATE CASCADE);
Fluent Mapping:
var contactConfiguration = new MappingConfiguration<Contact>(); contactConfiguration.MapType().WithDataAccessKind(DataAccessKind.ReadWrite).ToTable(tableName: "Contact"); contactConfiguration.HasProperty(ct => ct.ContactId).IsIdentity(KeyGenerator.Autoinc); configurations.Add(contactConfiguration);var siteContactConfiguration = new MappingConfiguration<SiteContact>(); siteContactConfiguration.MapType().WithDataAccessKind(DataAccessKind.ReadWrite).ToTable(tableName: "SiteContact"); siteContactConfiguration.HasProperty(sc => sc.ContactId).IsIdentity(); siteContactConfiguration.HasProperty(sc => sc.SiteId).IsIdentity();var siteConfiguration = new MappingConfiguration<Site>(); siteConfiguration.MapType().WithDataAccessKind(DataAccessKind.ReadWrite).ToTable(tableName: "Site"); siteConfiguration.HasProperty(s => s.SiteId).IsIdentity(KeyGenerator.Autoinc); siteConfiguration.HasAssociation(s => s.Address).WithLoadBehavior(LoadBehavior.Eager).WithOpposite(a => a.Site).HasConstraint((s, a) => s.AddressId == a.AddressId); siteConfiguration.HasAssociation(s => s.BusinessGroup).WithLoadBehavior(LoadBehavior.Lazy).WithOpposite(bg => bg.Sites).HasConstraint((s, bg) => s.BusinessId == bg.BusinessId); siteConfiguration.HasAssociation(s => s.Zone).WithLoadBehavior(LoadBehavior.Lazy).WithOpposite(z => z.Sites).HasConstraint((s, z) => s.ZoneId == z.ZoneId); configurations.Add(siteConfiguration); siteContactConfiguration.HasAssociation(sc => sc.Contact).WithLoadBehavior(LoadBehavior.Eager).WithOpposite(ct => ct.SiteContact).HasConstraint((sc, ct) => sc.ContactId == ct.ContactId).IsManaged(); siteContactConfiguration.HasAssociation(sc => sc.Site).WithLoadBehavior(LoadBehavior.Eager).WithOpposite(s => s.SiteContacts).HasConstraint((sc, s) => sc.SiteId == s.SiteId).IsManaged(); configurations.Add(siteContactConfiguration);
Error Message:
Additional information: The field 'siteContact' of class 'ItsdData.DAL.Contact' must use nested db-column extensions in a db-ref extension as the class 'ItsdData.DAL.SiteContact' has a composite primary key. --> FromMetadataContainer/namespace[ItsdData.DAL]/class[Contact]/field[siteContact]/db-column