Кратность недопустима в роли «CW_FirmaCommunication_CwFirma_Source» в отношении «CW_FirmaCommunication_CwFirma» - PullRequest
0 голосов
/ 16 ноября 2018

У меня следующая проблема:

У меня есть компания (CW_Firma), которая может иметь от 0 до многих способов связаться с ними (CW_FirmaCommunication). Я использую EntityFramework и FluentAPI для создания отношений.

У меня есть следующий код:

[Table("dbo.CW_Firma")]
public class CW_Firma
{
    [Key]
    [Column("F_VAT")]
    public int VatNumber { get; set; }
}

[Table("dbo.CW_FirmaCommunication")]
public class CW_FirmaCommunication
{
    [Key]
    [Column("FC_VAT")]
    public int VatNumber { get; set; }
    [Column("FC_Data")]
    public string FC_Data { get; set; }
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<CW_FirmaCommunication>()
        .HasRequired(c => c.CwFirma)
        .WithMany()
        .HasForeignKey(f => f.VatNumber);
}

Когда я запускаю свой код, я получаю следующее исключение:

Кратность недопустима в роли "CW_FirmaCommunication_CwFirma_Source" в отношении "CW_FirmaCommunication_CwFirma". Поскольку зависимая роль относится к ключевым свойствам, верхняя граница кратности зависимой роли должна быть «1»

.

Я искал в Интернете, искал различные решения здесь, в StackOverflow, но, похоже, ничто не решает мою проблему.

Может кто-нибудь сказать мне, где я иду не так?

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

После долгих поисков и попыток вот что я закончил и что работает нормально:

public class CW_FirmaCommunication
{
    [Key]
    public int FC_ID { get; set; }
    public int FC_VAT { get; set; }
    public int FC_Type { get; set; }
    public string FC_Data { get; set; }

    [ForeignKey("FC_VAT")]
    public virtual CW_Firma CwFirma { get; set; }
}

public class CW_Firma
{
    [Key]
    public int F_VAT { get; set; }
}

И я удалил код из «OnModelCreating».

0 голосов
/ 16 ноября 2018
  1. вы используете текущие аннотации API и сопоставления - я бы предпочел использовать только одно,
  2. , в сопоставлении аннотаций вы объявили, что поле VatNumber таблицы CW_FirmaCommunication является первичным ключом (как VatNumber в CW_Firma), чтоозначает, что у вас есть отношение 1: 1 при использовании свободного API, которое вы хотите 1: многие.

Основываясь на вашем коде, я сделал несколько исправлений:

[Table("dbo.CW_FirmaCommunication")]
public class CW_FirmaCommunication
{
    [Key]
    [Column("Communnication_Id")]
    public int CommunicationId { get; set; }

    [Column("FC_VAT")]
    public int VatNumber { get; set; }

    public CW_Firma Firma { get; set; }

    [Column("FC_Data")]        
    public string FC_Data { get; set; }
}

Я добавил отдельный PKдля таблицы связи (не FC_VAT) и добавлено свойство навигации Firma.

Новое отображение:

modelBuilder.Entity<CW_FirmaCommunication>()
            .HasRequired<CW_Firma>(c => c.Firma)
            .WithMany()
            .HasForeignKey(f => f.VatNumber);

Это работает в моей тестовой базе данных.

...