многозначные иностранные ключи в базе данных SQL CE, разработанные с помощью EF Code First - PullRequest
0 голосов
/ 19 июня 2011

Это мой первый набег в SQL CE или EF, поэтому у меня может быть много недоразумений. Я искал много записей в блоге, но все еще не могу понять, как это правильно.

У меня есть веб-сайт MVC3 для регистрации в гонке, в которой мы участвуем. У меня есть таблица RaceEvents и таблица Runners, в которой для каждого RaceEvent будет зарегистрировано много участников, то есть многие-к-одному. Вот POCO с лишними данными, удаленными:

  public class RaceEvent
{
    [Required]
    public int Id { get; set; }

    public virtual ICollection<Runner> Runners { get; set; }

}

    public class Runner
{
    [Required]
    public int Id { get; set; }
    [Required]
    public int RaceEventId { get; set;}
    [ForeignKey("RaceEventId")]
    public RaceEvent RaceEvent { get; set; }
}

Что, насколько я могу понять, должно сработать. Насколько я понимаю, по соглашению следует выяснить, что RaceEventId является внешним ключом для RaceEvents. И если этого недостаточно, я говорю об этом с помощью атрибута ForeignKey.

Однако, похоже, это не работает. Всякий раз, когда я вставляю нового бегуна, он также вставляет новую запись в таблицу RaceEvents. И когда я смотрю на диаграмму таблицы в ServerExplorer, она показывает два золотых ключа в верхней части диаграммы таблицы Runners, один для Id, идентифицированный в свойствах как PrimaryKey, а другой для RaceEventId, не идентифицированный как PrimaryKey, но указано в свойствах для таблицы Runners, а не для таблицы RaceEvents. Я бы ожидал золотой ключ для Id, но серебряный ForeignKey для RaceEventId.

FWIW, меня не особо волнует ICollection в RaceEvent, но все записи блога, похоже, подразумевают, что это необходимо.

Кто-нибудь может мне помочь сделать это правильно?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 20 июня 2011

Хорошо,

Извините, я не прочитал ваш вопрос достаточно подробно. В нашем проекте мы так представляем, что вы делаете. Я посмотрел в SSMS, и он не показывает указанный серый ключ, но он не создает событие гонки каждый раз, когда вы добавляете бегуна. Хотя вам нужно убедиться, что при создании бегуна вы устанавливаете свойство события гонки.

public class DB : DbContext
{
    public DB()
        : base("Data Source=(local);Initial Catalog=DB;Integrated Security=True")
    {
    }

    public IDbSet<Runner> Runners { get; set; }
    public IDbSet<RaceEvent> RaceEvents { get; set; }
}

public class RaceEvent
{
    [Key]
    public int RaceEventID { get; set; }


}

public class Runner
{
    [Key]
    public int RunnerID { get; set; }

    [Required]
    public virtual RaceEvent RaceEvent { get; set; }

}

Любой вопрос, дайте мне знать.

0 голосов
/ 19 июня 2011

Вам необходимо переопределить создание модели в DbContext.Ниже приведен пример для отношения AnsNet_User & AspNet_Roles N: N

protected override void OnModelCreating(DbModelBuilder dbModelBuilder)
{
    dbModelBuilder.Entity<aspnet_Users>().HasMany(a => a.aspnet_Roles).WithMany(b => 
    b.aspnet_Users).Map( 
        m =>
        {
            m.MapLeftKey("UserId");
            m.MapRightKey("RoleId");
            m.ToTable("aspnet_UsersInRoles");
        });

    base.OnModelCreating(dbModelBuilder);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...