У меня есть две модели:от одного до нуля или один с HasForeignKey
public class Person
{
public virtual int Id { get; set; }
public virtual Employee Employee { get; set; } // optional
}
public class Employee
{
public virtual int Id { get; set; }
public virtual int PersonId { get; set; }
public virtual Person Person {get; set; } // required
}
public class EmployeeConfiguration : EntityTypeConfiguration<Employee>
{
public EmployeeConfiguration()
{
Property(e=>e.PersonId) // I need this property mapped
.HasColumnName("person_id")
.HasColumnType("int");
}
}
Я хочу, чтобы сопоставить их с помощью свободно отображение. Таблица Employee имеет столбец «person_id», который не имеет значения NULL. Я попробовал следующее:
HasRequired(e => e.Person)
.WithOptional(p => p.Employee)
.Map(m => m.MapKey("person_id"));
Но он терпит неудачу с:
System.Data.Entity.ModelConfiguration.ModelValidationException: Один или несколько ошибок проверки были обнаружены в процессе генерации модели:
person_id: Имя: каждое имя свойства в типе должно быть уникальным. Свойство имя 'person_id' уже определено.
мне нужно PersonId собственность сама по себе, так что я в принципе хочу:
HasRequired(e => e.Person)
.WithOptional(p => p.Employee)
.HasForeignKey(e => e.PersonId); // there is no such method
Но нет такого метода здесь HasForeignKey
Не существует метода HasForeignKey, потому что для такого рода отношения HasRequired() .OoOptional() 'дополнительная сторона (' Employee') будет использовать свой первичный ключ в качестве внешнего ключа. – jjj
Используя ваш случай в качестве примера, это имеет смысл, потому что нет сущностей 'Employee', у которых нет соответствующего' Person', поэтому наличие 'Employee.PersonId' и' Employee.Id' является избыточным. Если вы хотите, чтобы 'PersonId' был внешним ключом, вы можете использовать' HasKey (emp => emp.PersonId) '. – jjj
Как только у вас есть мультипликаторы такого типа отношений, все разваливается. – jjj