2011-02-07 2 views
1

J'ai deux tables:Entity Framework 4 ctp5 une table a deux clés étrangères à la même table

Utilisateurs et Nouvelles. Table News a les colonnes id, name, createdby, modifiedby. L'utilisateur de la table a l'ID et le nom de la colonne. Table News references table Utilisateur par clé étrangère createdby et modifiedby. J'utilise Entity Framework 4 ctp5. J'ai essayé d'accéder aux propriétés createdby ou modifiedby, mais l'erreur s'affiche: Nom de colonne non valide "UserId1", Nom de colonne incorrect "UserId2". Quelqu'un pourrait-il expliquer ce que je fais de mal?

public class News 
{ 
    // Primitive properties 

    public int ID { get; set; } 
    public string Name { get; set; } 
    public System.Guid UserId { get; set; } 
    public System.Guid UserId1 { get; set; } 

    // Navigation properties 

    public virtual User User { get; set; } 
    public virtual User User1 { get; set; } 

} 

public class User 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 

public partial class SomeEntities : DbContext 
{ 
    public SomeEntities() : base("name=SomeEntities"){ } 

    public DbSet<User> Users { get; set; } 
    public DbSet<News> News { get; set; } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<News>().Property(i => i.UserId).HasColumnName("CreatedBy"); 
     modelBuilder.Entity<News>().Property(i => i.UserId1).HasColumnName("ModifiedBy"); 
    } 
} 

Répondre

2

Le modèle d'objet suivant donne les résultats escomptés (je renomme propriétés juste pour le rendre plus lisible):

public class News 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public Guid CreatedBy { get; set; } 
    public Guid ModifiedBy { get; set; } 
    public virtual User CreatedByUser { get; set; } 
    public virtual User ModifiedByUser { get; set; } 
} 

public class User 
{ 
    public Guid ID { get; set; } 
    public string Name { get; set; } 
} 

public class Ctp5Context : DbContext 
{ 
    public DbSet<User> Users { get; set; } 
    public DbSet<News> News { get; set; } 
    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<News>() 
        .HasRequired(n => n.CreatedByUser) 
        .WithMany() 
        .HasForeignKey(n => n.CreatedBy); 

     modelBuilder.Entity<News>() 
        .HasRequired(n => n.ModifiedByUser) 
        .WithMany() 
        .HasForeignKey(n => n.ModifiedBy) 
        .WillCascadeOnDelete(false);       
    } 
} 
Questions connexes