none
Отношение один к одному в EF 4.3 RRS feed

  • Вопрос

  • Привет всем ! Хочу реализовать нечто подобное, но не получается.

     public class Entity1
        {
          [Key]
          public int Id { get; set; }
          public string A { get; set; }
          //[ForeignKey("Id")]
          public virtual Entity2 Entity2 { get; set; } 
        }
        public class Entity2
        {
          [Key]
          public int Id { get; set; }
          public string B { get; set; }
          //[ForeignKey("Id")]
          public virtual Entity1 Entity1 { get; set; }
        }
        public class TestDbContext : DbContext
        {
          public DbSet<Entity1> E1 { get; set; }
          public DbSet<Entity2> E2 { get; set; }
    
          protected override void OnModelCreating(DbModelBuilder modelBuilder)
          {
            modelBuilder.Entity<Entity1>().HasRequired(e => e.Entity2).WithMany().HasForeignKey(e => e.Id);
            modelBuilder.Entity<Entity2>().HasRequired(e => e.Entity1).WithMany().HasForeignKey(e => e.Id).WillCascadeOnDelete(false);
            base.OnModelCreating(modelBuilder);
          }
        }

    Т.е. мне нужны две таблицы, с одинаковыми внешними и первичными ключами(первичный ключ,одновременоо и внешний).
    19 февраля 2012 г. 9:16
    Модератор

Ответы

  • Атрибутами не вышло, а вот через Fluent API получилось то, что надо:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
          {
            modelBuilder.Entity<Entity1>().HasRequired(e => e.Entity2).WithRequiredPrincipal(e => e.Entity1);
            modelBuilder.Entity<Entity2>().HasRequired(e => e.Entity1).WithRequiredDependent(e => e.Entity2);
            base.OnModelCreating(modelBuilder);
          }

    • Помечено в качестве ответа YatajgaModerator 20 февраля 2012 г. 17:43
    20 февраля 2012 г. 17:43
    Модератор

Все ответы

  • В чем выражается "не получается"?
    20 февраля 2012 г. 15:22
  • Исключение вылетает, EF не в "состоянии понять" чего я хочу, т.е бд не создаётся.

    20 февраля 2012 г. 16:43
    Модератор
  • Атрибутами не вышло, а вот через Fluent API получилось то, что надо:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
          {
            modelBuilder.Entity<Entity1>().HasRequired(e => e.Entity2).WithRequiredPrincipal(e => e.Entity1);
            modelBuilder.Entity<Entity2>().HasRequired(e => e.Entity1).WithRequiredDependent(e => e.Entity2);
            base.OnModelCreating(modelBuilder);
          }

    • Помечено в качестве ответа YatajgaModerator 20 февраля 2012 г. 17:43
    20 февраля 2012 г. 17:43
    Модератор
  • Спасибо, что выложили решение проблемы. Другим пользователям оно будет полезно, если они столкнутся с подобной задачей.


    Для связи [mail]

    21 февраля 2012 г. 7:54