Допустим, у меня есть следующие три сущности, определенные в соответствии с тремя таблицами, а именно Entity1
, Entity2
и Entity3
public class Entity1 {
public Guid Id { get; set; }
public string Foo { get; set; }
}
public class Entity2 {
public Guid Id { get; set; }
public string Bar { get; set; }
}
public class Entity2 {
public Guid Id { get; set; }
public int Boo { get; set; }
}
Теперь предположим, что каждая из этих сущностей связана друг с другом с помощью свойства position, которое, например, обеспечивает упорядочение этих объектов в списке. Чтобы сохранить эту информацию о местоположении, я создаю другую таблицу EntityPosition
следующим образом
public class EntityPosition {
public Guid EntityId { get; set; }
public int Position { get; set; }
}
, где EntityId
- это суррогатный ключ к Entity1.Id
, Entity2.Id
или Entity3.Id
, т. Е. Одна запись в таблица EntityPosition
соответствует одному из трех объектов. Я хотел бы настроить это так, чтобы при добавлении новой сущности я мог сделать это следующим образом
var position = new EntityPosition {
Position = 0
};
var entity = new Entity2{
EntityPosition = position
};
context.Entity2.Add(entity);
context.SaveChanges();
, чтобы EF правильно создал идентификатор Guid для Entity2
и назначил эту же Идентификатор EntityId
в таблице EntityPosition
. Поэтому я попытался добавить свойство навигации EntityPosition
к каждой из таблиц сущностей следующим образом
public class Entity1 {
public Guid Id { get; set; }
public string Foo { get; set; }
public EntityPosition EntityPosition { get; set; }
}
public class Entity2 {
public Guid Id { get; set; }
public string Bar { get; set; }
public EntityPosition EntityPosition { get; set; }
}
public class Entity2 {
public Guid Id { get; set; }
public int Boo { get; set; }
public EntityPosition EntityPosition { get; set; }
}
и эквивалентные свойства навигации в EntityPosition
, т. Е.
public class EntityPosition {
public Guid EntityId { get; set; }
public int Position { get; set; }
public Entity1 { get; set; }
public Entity2 { get; set; }
public Entity3 { get; set; }
}
, затем я также добавил следующую свободную конфигурацию для каждого из классов сущностей
builder.HasOne(x => x.PathEntityPosition)
.WithOne(x => x.Entity1)
.HasForeignKey<PathEntityPosition>(x => x.EntityId);
builder.HasOne(x => x.PathEntityPosition)
.WithOne(x => x.Entity2)
.HasForeignKey<PathEntityPosition>(x => x.EntityId);
builder.HasOne(x => x.PathEntityPosition)
.WithOne(x => x.Entity3)
.HasForeignKey<PathEntityPosition>(x => x.EntityId);
Однако в настоящее время я получаю ошибку ограничения FK при попытке добавить новую сущность с позицией. Правильно ли я настроил это при попытке связать одну таблицу с несколькими таблицами?