2011-02-07 20 views
1

私は2つのテーブルを持っています:Entity Framework 4 ctp5 1つのテーブルに同じテーブルへの2つの外部キーがあります

ユーザーとニュース。テーブルニュースにはid、name、createdby、modifiedbyという列があります。テーブルユーザーには、IDと名前の列があります。テーブルニュースは、外部キーbybyとmodifiedbyによってテーブルを参照します。私は エンティティフレームワーク4 ctp5を使用します。 createdbyまたはmodifiedbyプロパティにアクセスしようとしましたが、エラーが発生しました。無効な列名 "UserId1"、無効な列名 "UserId2"。誰かが私が間違っていることを説明できますか?

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"); 
    } 
} 

答えて

2

次のオブジェクトモデルを使用すると、目的の結果(私はそれを読みやすくするためにプロパティに改称)を与える:

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);       
    } 
} 
関連する問題