Entity Framework Двойная связь между таблицами - PullRequest
0 голосов
/ 04 июня 2018

Я работаю на веб-сайте ASP net CORE MVC с Entity Framework, и у меня есть двойная связь между двумя таблицами:

DocType
# DocTypeName
#DocTypeValidationText

TraductionInterface
+ id

DocTypeName и DocTypeValidationText являются ForeignKey для таблицы TraductionInterface : один DocType имеет 2 TraductionInterface

вот мой класс:

DocType.cs

 public class DocType
{
    [Key]
    public int DocTypeID { get; set; }

    [Required]
    public int DocTypeName { get; set; }
    [ForeignKey("DocTypeName")]
    public virtual TraductionInterface TraductionInterfaceName { get; set; }

    [Required]
    public int DocTypeValidationText { get; set; }
    [ForeignKey("DocTypeValidationText")]
    public virtual TraductionInterface TraductionInterfacevalidationText { get; set; }
}

TraductionInterface.cs

public class TraductionInterface
    {
        [Key]
        public int TraductionInterfaceID;

        [ForeignKey("DocTypeName")]
        public virtual DocType DocTypeName { get; set; }

        [ForeignKey("DocTypeValidationText")]
        public virtual DocType DocTypeValidationText { get; set; }

     }

ApplicationDbContext.cs

builder.Entity<DocType>().ToTable("DocType").HasOne(d => d.TraductionInterfaceName).WithOne(t => t.DocTypeName);
            builder.Entity<DocType>().HasOne(d => d.TraductionInterfacevalidationText).WithOne(t => t.DocTypeValidationText);

, но я получаю эту ошибку при попытке обновить

Невозможно вызвать свойство для свойства«DocTypeValidationText» для типа объекта «TraductionInterface», поскольку он настроен как свойство навигации.Свойство можно использовать только для настройки скалярных свойств.

РЕДАКТИРОВАТЬ
@ user1672994 Решение, похоже, решило проблему, но применимо только первое отношение:
если
builder.Entity<DocType>().ToTable("DocType").HasOne(d => d.TraductionInterfaceName).WithOne(t => t.DocTypeName);
до
builder.Entity<DocType>().HasOne(d => d.TraductionInterfacevalidationText).WithOne(t => t.DocTypeValidationText);
применяется отношение TraductionInterfaceName, иначе это отношение TraductionInterfacevalidationText.Как я могу заставить эти 2 отношения работать вместе?

1 Ответ

0 голосов
/ 04 июня 2018

В самой ошибке указывается, что вы должны определить скалярное свойство и при определении отношения ForeignKey.Приведенный ниже код определяет свойства отношения и использует его при присоединении отношения ForeignKey

public class TraductionInterface
{
    [Key]
    public int TraductionInterfaceID {get; set; }

    public int DocTypeNameId {get; set; }

    [ForeignKey("DocTypeNameId")]
    public virtual DocType DocTypeName { get; set; }

    public int DocTypeValidationTextId {get; set; }

    [ForeignKey("DocTypeValidationTextId")]
    public virtual DocType DocTypeValidationText { get; set; }

 } 
...