0

Я разрабатываю проект ASP.NET MVC. Я использую Entity Framework Code First для взаимодействия с данными. Но у меня возникла проблема с построением отношения «один-один-один» в первом подходе кода. См. Мой сценарий ниже.Не удается установить связь один-на-один в коде Entity Framework сначала в .NET.

Это мой класс Item

public class Item 
    { 
     public int Id { get; set; } 
     [MaxLength(90)] 
     public String ImagePath { get; set; } 
     [MaxLength(50)] 
     public String Name { get; set; } 
     [MaxLength(70)] 
     public String MmName { get; set; } 
     [MaxLength(250)] 
     public String Description { get; set; } 
     [MaxLength(300)] 
     public String MmDescription { get; set; } 
     public int TotalReviewStars { get; set; } 
     public int TotalReviewCount { get; set; } 

     public virtual ICollection<Category> Categories { get; set; } 
     public virtual ICollection<Gallery> Galleries { get; set; } 
     public virtual ItemContactInfo Contact { get; set; } 
    } 

Я хочу, чтобы класс Item, чтобы иметь дополнительный класс Contact. Поэтому я добавил «публичный виртуальный контакт ItemContactInfo» в класс Item. Поэтому я могу легко получить контакт, как «item.Contact» в моем коде.

Это будет необходим Позиционный мой класс ItemContactInfo для Контакта

public class ItemContactInfo 
    { 
     public int Id { get; set; } 
     [MaxLength(50)] 
     public String GeoLocation { get; set; } 
     [MaxLength(200)] 
     public String Address { get; set; } 
     [MaxLength(250)] 
     public String MmAddress { get; set; } 
     [MaxLength(70)] 
     public String Phones { get; set; } 
     [MaxLength(70)] 
     public String MmPhones { get; set; } 
     [MaxLength(200)] 
     public String Emails { get; set; } 
     public int? AreaId { get; set; } 
     public int ItemId { get; set; } 

     [ForeignKey("AreaId")] 
     public virtual Area Area { get; set; } 
     [ForeignKey("ItemId")] 
     public virtual Item Item { get; set; } 
    } 

Контакта класса.

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

Unable to determine the principal end of an association between the types 'AyarDirectory.Domain.Entities.Item' and 'AyarDirectory.Domain.Entities.ItemContactInfo'. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations. 

Как это исправить?

+1

Возможный дубликат [Реализация нуля или одного нуля или одного отношения в коде EF сначала Fluent API] (http://stackoverflow.com/questions/14701378/implementing-zero-or-one-to-zero-or -one-relationship-in-ef-code-first-by-fluent) –

+0

Другой дубликат: http://stackoverflow.com/q/26389707/861716, но с использованием 'HasOptional' вместо' HasRequired'. –

ответ

0

Это может быть циклическая ссылка, поскольку у вас есть свойства в каждой модели, указывающие друг на друга. Item < => ItemContactInfo. Избавьтесь от свойства Contact в модели Item.

Элемент ItemId в таблице ItemContactInfo должен быть ключом, а также внешним ключом, чтобы обеспечить связь 0 или 1.

+0

Это не проблема. \ –

+0

@WaiYan EF не может определить главный конец по мере возникновения ошибки. Это связано с тем, что обе модели указывают друг на друга, и EF не может понять это. –

+0

Opps. Извините, я ответил на другой вопрос. Да, я изменил его на отношения друг с другом. –