I Have two tables:
Users and News. Table News has columns id, name, createdby, modifiedby. Table user has columns id and name. Table News references table User by foreign keys createdby and modifiedby. I use Entity Framework 4 ctp5. I tried to access createdby or modifiedby properties, but error appers: Invalid column name "UserId1", Invalid column name "UserId2". Could anybody explain what I am doing wrong?
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");
}
}
The following object model gives you the desired results (I renamed properties just to make it more readable):
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);
}
}