Entity Framework 4 ctp5 одна таблица имеет два внешних ключа к одной таблице - PullRequest
1 голос
/ 07 февраля 2011

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

Пользователи и новости. Таблица новостей имеет столбцы id, name, созданный, измененный. У пользователя таблицы есть столбцы id и name. Таблица Новости ссылки на таблицу Пользователь по внешним ключам создается и модифицируется. я использую 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");
    }
}

1 Ответ

2 голосов
/ 07 февраля 2011

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

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