Entity Framework 4 ctp5 одна таблица имеет два внешних ключа к одной и той же таблице

У меня есть две таблицы:

Пользователи и новости. Табличные новости имеют столбцы с идентификатором, именем, автором, автором изменения. Пользователь таблицы имеет идентификатор и имя столбца. Таблица News ссылается на таблицу Пользователь по внешним ключам, созданным и измененным пользователем. Я использую Entity Framework 4 ctp5. Я пытался получить доступ к свойствам, созданным или измененным, но появляется ошибка: Недопустимое имя столбца «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");
    }
}

person Viktoras    schedule 07.02.2011    source источник


Ответы (1)


Следующая объектная модель дает желаемые результаты (я переименовал свойства, чтобы сделать ее более читабельной):

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);                        
    }
}
person Morteza Manavi    schedule 07.02.2011