Entity Framework 4.1 два FK, указывающие на одну и ту же таблицу - PullRequest
0 голосов
/ 10 ноября 2011

Я столкнулся с проблемой при добавлении двух навигационных свойств одного и того же типа в модель, сообщая мне об этой ошибке:

System.Data.SqlClient.SqlException: 
Invalid column name : 'Createur_IdUtilisateur'.
Invalid column name : 'Proprietaire_IdUtilisateur'.

Это код (неработающий), который у меня есть:

public class Billet
{
    [Key]
    public int IdBillet { get; set; }
    public int IdMandat { get; set; }
    public string Titre { get; set; }
    [AllowHtml]
    public string Description { get; set; }
    public int IdUtilisateurCreateur { get; set; }
    public int IdUtilisateurProprietaire { get; set; }
    public DateTime DateCreation { get; set; }
    public DateTime? DateFermeture { get; set; }
    public int EstimationTemps { get; set; }
    public int Priorite { get; set; }
    public bool FermetureParCreateur { get; set; }

    public virtual ICollection<Intervention> Interventions { get; set; }
    public virtual Mandat Mandat { get; set; }
    public virtual Utilisateur Createur { get; set; }
    public virtual Utilisateur Proprietaire { get; set; }
}

public class Utilisateur
{
    [Key]
    public int IdUtilisateur { get; set; }
    public int IdUtilisateurRole { get; set; }
    public string Courriel { get; set; }
    public string Nom { get; set; }
    public string Password { get; set; }
    public bool Actif { get; set; }

    public virtual UtilisateurRole Role { get; set; }
}

А вот так выглядят отношения в базе данных.

database relationships

Я читал о [InverseProperty], но я не уверен, как бы я реализовал это в моей ситуации. Нужно ли добавлять свойства обратной навигации в мой класс Utilisateur , чтобы эта работа работала?

1 Ответ

2 голосов
/ 11 ноября 2011

Вскоре после того, как я спросил, я понял свою ошибку, вот как я ее исправил:

public class Entities : DbContext
{
    ...

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        ...

        modelBuilder.Entity<Billet>()
            .HasRequired(b => b.Createur)
            .WithMany()
            .HasForeignKey(b => b.IdUtilisateurCreateur);
        modelBuilder.Entity<Billet>()
            .HasRequired(b => b.Proprietaire)
            .WithMany()
            .HasForeignKey(b => b.IdUtilisateurProprietaire);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...