EF FluentAPI от 0..1 до * mapping - PullRequest
       22

EF FluentAPI от 0..1 до * mapping

2 голосов
/ 24 декабря 2010

Как мне сопоставить отношение 0..1 к * в EF 4.0 FluentAPI CTP5?Я продолжаю получать эту ошибку

Поскольку все свойства в зависимой роли не могут быть равны нулю, кратность основной роли должна быть равна 1.не знаю как именно это исправить ..

Мой код выглядит так

    public class Child{
        public int pID { get; set; }
        public Parent Parent_Object{ get; set; } 
        public int Parent{ get; set; } 

        public Child() {
        }
    }


    public class Parent {
        public int pID { get; set; }
        public List<Child>  Children { get; set; }

        public Parent () {
        }
    }

Для отображения код выглядит так

modelBuilder.Entity<Child>().HasKey(c=> c.pID);  
modelBuilder.Entity<Parent>().HasKey(c=> c.pID); 
modelBuilder.Entity<Child>().HasOptional(c=> c.Parent_Object)
                            .WithMany(p => p.Children)
                            .HasForeignKey(p => p.Parent);

Также возможно ли этоиметь только

public Parent Parent{ get; set; } 

вместо

public Parent Parent_Object{ get; set; } 
public int Parent{ get; set; } 

В базе данных поле FK называется «Parent», а не «ParentpID».В таком случае как должно выглядеть отображение?

1 Ответ

9 голосов
/ 24 декабря 2010

Вы можете просто удалить столбец внешнего ключа из сопоставления, и все будет работать нормально:

  public class Child{
    public int pID { get; set; }
    public Parent Parent_Object{ get; set; } 

    public Child() { }
  }


  public class Parent {
    public int pID { get; set; }
    public List  Children { get; set; }

    public Parent () { }
  }

  public class Context : DbContext {

    protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder) {

      modelBuilder.Entity().HasKey(c => c.pID);
      modelBuilder.Entity().HasKey(c => c.pID);  
      modelBuilder.Entity().HasOptional(c => c.Parent_Object).WithMany(p => p.Children);
    }

    public DbSet Parents { get; set; }
    public DbSet Childs { get; set; }
  }

В качестве альтернативы вы можете использовать свойство Nullable int Parent, например:

public int? ParentId { get; set; }  

В этом случае ваш первоначальный код также будет правильным.

...