Дублирующиеся свойства навигации при использовании Entity Framework 6 и свободной api

c# entity-framework entity-framework-6 fluent foreign-keys

Вопрос

У меня две модели с отношениями.

public class Customer
{
    public Customer()
    {
        CustomerSites = new List<CustomerSite>();
    }     

    public IList<CustomerSite> CustomerSites { get; set; }
}

public class CustomerSite
{
    public Guid CustomerId { get; set; }
    public Customer Customer { get; set; }
}

Соотношения создаются с помощью свободного api: (я также попробовал только одно из приведенных ниже утверждений)

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
        modelBuilder.Entity<CustomerSite>()
            .HasRequired(x => x.Customer)
            .WithMany(x => x.CustomerSites)
            .HasForeignKey(x => x.CustomerId);

        modelBuilder.Entity<Customer>()
            .HasMany(x => x.CustomerSites)
            .WithRequired(x => x.Customer)
            .HasForeignKey(x => x.CustomerId);
}

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

 "dbo.CustomerSites",
            c => new
                {                     
                    CustomerId = c.Guid(nullable: false),                     
                    Customer_Id = c.Guid(),
                })
            .ForeignKey("dbo.Customers", t => t.CustomerId, cascadeDelete: true)
            .ForeignKey("dbo.Customers", t => t.Customer_Id)

Он должен быть только одним CustomerId, а не Customer_Id. Как вы видите, это также равно нулю. Если я удалю этот столбец в контексте базы данных, это исключение при обновлении. Я думаю, это довольно странно ...

Популярные ответы

Причина заключалась в том, что во время повторного факторинга некоторые старые свойства оставались в сущности, которая влияла на автоматическое сопоставление на дополнительных FK в БД.

Пример: если у нас есть

public class CustomerSite
{
    public Guid CustomerId { get; set; }
    public Customer Customer { get; set; }
    ............
    public Customer Customer1 { get; set; }
}

и имеют только один свободный оператор отображения, такой как

modelBuilder.Entity<CustomerSite>().HasRequired(x => x.Customer)
.WithMany(x => x.CustomerSites).HasForeignKey(x => x.CustomerId);

в базе данных у нас будет дополнительный FK, такой как Customer1_Id, который будет нулевым.

Быть внимательным. Может быть, это помогает кому-то !!!




Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему