ASP Boilerplate (EF) - Fluent Api - Таблица собственных ссылок, не использующая первичный ключ

Поэтому я должен импортировать таблицу из другой базы данных. Таблица ссылается сама на себя, используя собственный ключ, но я не могу доверять ключу, тем более что таблица, в которую я импортирую, будет для нескольких наборов данных.

Я использую Entity Framework и сначала свободно использую API, но у меня нет времени, чтобы найти решение этой проблемы.

Вот мой класс POCO (упрощенный только для необходимых точек данных):

public class Person
{
    public virtual int Id { get; set; }
    public virtual int personid { get; set; }
    public virtual int? parentid { get; set; }

    public virtual Person parent { get; set; }
    public virtual ICollection<Person> children { get; set; }
}

Это была бы простая таблица со ссылками на себя, если бы я мог использовать Id, но я должен использовать personid. Я настроил идею свободного API, который мне нужен здесь, но EF продолжает смотреть на Id.

modelBuilder.Entity<Person>()
   .HasOptional(p => p.parent)
   .WithMany(p => p.children)
   .HasForeignKey(p => p.parentid)
   .WillCascadeOnDelete(false);

Есть ли обходные пути для заполнения коллекции с использованием personid в качестве уникального ограничения (которое еще не реализовано в EF6.1.2)?

Я также использую Asp.NetBoilerplate, поэтому некоторый контроль над моими сущностями, репозиториями и т. Д. Возможен, но не рекомендуется. Т.е. "Id" считается первичным ключом для любой и всех таблиц.

1 ответ

Хмм..

почему бы не использовать HasKey для определения столбца id??

modelBuilder.Entity<Person>()
    .HasKey(p=> p.personId)
    .HasOptional(p => p.parent)
    .WithMany(p => p.children)
    .HasForeignKey(p => p.parentid)
    .WillCascadeOnDelete(false);
Другие вопросы по тегам