Я думаю, что когда вы определяете это отображение ...
modelBuilder.Entity<Contact>()
.HasOptional(b => b.WebsiteMembership)
.WithRequired(b => b.Contact)
.Map(b => b.MapKey("WebsiteMembershipId"));
... вы косвенно определяете, что является основным и что зависит от отношений.Очевидно, Contact
является основным, потому что набор свойств WebsiteMembership
является необязательным для Contact
, его можно хранить без WebsiteMembership
.Субъект WebsiteMembership
на другой стороне имеет обязательную ссылку на Contact
, что означает, что зависит от Contact
.
принципала (Contact
) это объект с первичным ключом, зависимый (WebsiteMembership
) объект с внешним ключом.Таким образом, когда вы используете MapKey
для установки имени WebsiteMembershipId
столбца внешнего ключа, вы определяете столбец для таблицы WebsiteMembership
, а не для Contact
.Но WebsiteMembership
уже имеет свойство под названием WebsiteMembershipId
.(Я полагаю, что именно здесь EF жалуется, что " Имя свойства 'WebsiteMembershipId' уже определено .) В отношении один-ко-многим внешним ключом будет ContactId
как отдельное свойствостолбца, и вы должны будете использовать HasForeignKey
вместо MapKey
. Но в отношении один к одному ясно, что внешний ключ является первичным ключом в то же время, поэтому вам не нужно определятьвнешний ключ вообще.
Короче говоря, просто удалите MapKey
:
modelBuilder.Entity<Contact>()
.HasOptional(b => b.WebsiteMembership)
.WithRequired(b => b.Contact);
(Но теперь мне любопытно, можете ли вы определить отношения между int
и decimal
свойство или если вы получите следующую ошибку.)