1

我有两张桌子:

用户和新闻。表新闻有列 id、name、createdby、modifiedby。表用户具有列 id 和 name。表新闻通过外键createdby 和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");
    }
}
4

1 回答 1

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);                        
    }
}
于 2011-02-07T15:05:34.547 回答