Существует несколько переходов в типе сущности «Сообщения», которые указывают на один и тот же набор свойств - «MessageFrom» с использованием ForeignKeyAttribute. - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть таблица сообщений и таблица квартир. Сообщения имеют MessageFrom, связанный с apartmentId и MessageTo, который также связан с идентификатором квартиры. Я реализую свой код, как всегда, используя ядро ​​Entity Framework. но вещи не кажутся правильными. Вот мой код:

1 - Приложение DbContext

modelBuilder.Entity<Messages>(entity =>
            {
                entity.HasKey(e => e.MessageId);
                entity.Property(e => e.DateOfMessage).HasColumnType("DateTime");
                entity.Property(e => e.Message).HasColumnType("nvarchar(300)").HasMaxLength(300);
                entity.Property(e => e.IsRed).HasColumnName("IsRed").HasColumnType("bit");
                entity.Property(e => e.MessageTo).HasColumnType("int");
                entity.HasOne(e => e.Apartment).WithMany(x => x.Messages).HasForeignKey(e => e.MessageFrom).HasConstraintName("FK_MessageFrom_Apartment");
                entity.HasOne(e => e.Apartment).WithMany(x => x.Messages).HasForeignKey(e => e.MessageTo).HasConstraintName("FK_MessageTo_Apartment");

        });

2 - класс модели:

  public class Messages
    {

        public int MessageId { get; set; }





        public int ?MessageFrom { get; set; }
        [ForeignKey("MessageFrom")]
        public Apartment Apartment { get; set; }


        public int ?MessageTo { get; set; }
        [ForeignKey("MessageTo")]
        public Apartment apartment { get; set; }
        [Required]
        public DateTime DateOfMessage { get; set; }
        [Required]
        public string Message { get; set; }

        public bool IsRed { get; set; }

    }

3 - проблема: Существует несколько переходов в типе сущности «Сообщения», которые указывают на один и тот же набор свойств - «MessageFrom» с использованием ForeignKeyAttribute

4- иногда дает: Неверное имя столбца 'ApartmentId'. ' в то время как в модельных сообщениях у меня вообще нет квартирId

1 Ответ

0 голосов
/ 26 апреля 2019

Этот код здесь:

            entity.HasOne(e => e.Apartment).WithMany(x => x.Messages).HasForeignKey(e => e.MessageFrom).HasConstraintName("FK_MessageFrom_Apartment");
            entity.HasOne(e => e.Apartment).WithMany(x => x.Messages).HasForeignKey(e => e.MessageTo).HasConstraintName("FK_MessageTo_Apartment");

Ссылка на то же свойство навигации.Переименование + Обновление ссылок сохранит этот код неработающим.

    public int ?MessageFrom { get; set; }
    [ForeignKey("MessageFrom")]
    public virtual Apartment ApartmentFrom { get; set; }


    public int ?MessageTo { get; set; }
    [ForeignKey("MessageTo")]
    public virtual Apartment ApartmentTo { get; set; }

С этими приписанными членами вам не нужно / не нужно дублирование с modelBuilder, используйте один или другой.ColumnType и тому подобное также могут быть объявлены через атрибуты.Я предполагаю, что EF запутывается между атрибутами и конфигурацией modelBuilder.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...