2011-02-07 79 views
1

我有两个表:实体框架4 ctp5一个表有两个外键给同一个表

用户和新闻。表格新闻具有列ID,名称,创建者,修改者。表用户具有列标识和名称。表新闻引用表用户由外键创建并修改。我使用 实体框架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);       
    } 
} 
相关问题