0

Я кодирую интернет-приложение MVC5 с EF6 и задаю вопрос относительно имени внешнего ключа.Entity Framework 6 foreign key

У меня есть модель под названием MapLocationList, который имеет эти два поля:

public int mapLocationListGalleryId { get; set; } 
public virtual MapLocationListGallery mapLocationListGallery { get; set; } 

Когда EF создает таблицу, есть и следующие столбцы:

  • mapLocationListGalleryId
  • MapLocationListGallery_Id

Может кто-нибудь, пожалуйста, объясните n Почему есть два столбца для внешнего ключа MapLocationListGallery?

Заранее спасибо

EDIT

Я изменил имя для использования в верхнем регистре М, однако дополнительный столбец еще есть.

Вот моя модель:

public class MapLocationList : IMapLocationItemWithAssets 
{ 
    [Key] 
    public int Id { get; set; } 
    [Required] 
    public string name { get; set; } 
    public bool enabled { get; set; } 
    [ScaffoldColumn(false)] 
    public string mapLocationItemType { get; set; } 
    [ScaffoldColumn(false)] 
    public string userName { get; set; } 
    [ScaffoldColumn(false)] 
    public DateTime creationDate { get; set; } 
    [ScaffoldColumn(false)] 
    public DateTime lastUpdate { get; set; } 
    public string thumbnailDisplayText { get; set; } 
    public bool parentIsMapLocation { get; set; } 
    public int thumbnailAssetId { get; set; } 
    public virtual Asset thumbnailAsset { get; set; } 
    public int mapLocationId { get; set; } 
    public virtual MapLocation mapLocation { get; set; } 
    public int mapLocationListGalleryId { get; set; } 
    public virtual MapLocationListGallery mapLocationListGallery { get; set; } 

    public virtual ICollection<MapLocationListItem> listItems { get; set; } 

    public MapLocationList() 
    { 
     creationDate = DateTime.Now; 
     lastUpdate = DateTime.Now; 
     listItems = new List<MapLocationListItem>(); 
    } 
} 

Я также следующее в функции OnModelCreating:

modelBuilder.Entity<MapLocationListGallery>() 
    .HasRequired(c => c.thumbnailAsset) 
    .WithMany() 
    .WillCascadeOnDelete(false); 

modelBuilder.Entity<MapLocationList>() 
    .HasRequired(c => c.thumbnailAsset) 
    .WithMany() 
    .WillCascadeOnDelete(false); 

modelBuilder.Entity<MapLocationList>() 
    .HasRequired(c => c.mapLocationListGallery) 
    .WithMany() 
    .WillCascadeOnDelete(false); 

modelBuilder.Entity<MapLocationListItem>() 
    .HasRequired(c => c.thumbnailAsset) 
    .WithMany() 
    .WillCascadeOnDelete(false); 

ответ

1

Я использую этот подход, а также и я не испытываю такого поведения. Возможно, вам нужно переименовать свойства CamelCase (обратите внимание на буквы М):

public int MapLocationListGalleryId { get; set; } 
public virtual MapLocationListGallery MapLocationListGallery { get; set; } 

Если это не поможет взглянуть на ForeignKeyAttributehere и here.

Редактировать

Я не знаком с беглым апи, но я думаю, вы могли бы попытаться установить внешний ключ явно используя что-то вроде:

modelBuilder.Entity<MapLocationList>() 
    .HasRequired(c => c.mapLocationListGallery) 
    .WithMany() 
    .HasForeignKey(x => x.mapLocationListGalleryId) 
    .WillCascadeOnDelete(false); 

Для получения дополнительной информации см this article, тема: «Настройка имен нетрадиционных иностранных ключей». Хотя это странно, это необходимо, потому что ваш код, похоже, соответствует соглашению Code First (с капиталом M, то есть именем класса).

+0

Я добавил дополнительную информацию в свой пост. – user3736648