2014-09-08 5 views
5

EF 7 alpha3에서 일대일 관계를 만드는 방법은 무엇입니까?EF 7 알파에서 외래 키를 추가하는 방법

탐색 속성을 정의하는 옛 방식이 작동하지 않으며 modelBuilder에 이전에 사용 된 HasRequired/HasOptional 메서드가 없습니다.

누구든지 그 점을 밝힐 수 있습니까?

답변

2

최근까지는 관계를 정의하기위한 모델 빌더 API가 없었습니다. 대신 기본 modelBuilder.Model 개체를 조작해야합니다. 다음은 일대 다 관계의 예입니다. what these APIs will look like에 대한 생각

class Blog 
{ 
    public Blog() 
    { 
     Posts = new List<Post>(); 
    } 

    public int Id { get; set; } 

    public ICollection<Post> Posts { get; set; } 
} 

class Post 
{ 
    public int Id { get; set; } 

    public int BlogId { get; set; } 
    public Blog Blog { get; set; } 
} 

class BlogContext : DbContext 
{ 
    public DbSet<Blog> Blogs { get; set; } 
    public DbSet<Post> Posts { get; set; } 

    protected override void OnModelCreating(ModelBuilder builder) 
    { 
     builder.Entity<Post>().ForeignKeys(x => x.ForeignKey<Blog>(p => p.BlogId)); 

     var model = builder.Model; 
     var blog = model.GetEntityType(typeof(Blog)); 
     var post = model.GetEntityType(typeof(Post)); 
     var fk = post.ForeignKeys.Single(k => k.ReferencedEntityType == blog); 
     blog.AddNavigation(new Navigation(fk, "Posts", pointsToPrincipal: false)); 
     post.AddNavigation(new Navigation(fk, "Blog", pointsToPrincipal: true)); 
    } 
} 

당신은 (2014년 7월 31일 기준) 현재에 대한 자세한 내용을보실 수 있습니다. 최종 결과는 다음과 같습니다.

modelBuilder.Entity<Blog>() 
    .OneToMany(b => b.Posts, p => p.Blog).ForeignKey(b => b.BlogId); 
+0

저는 EF7 beta3을 사용하고 있으며 Entity에는 ForeignKeys 속성이 없습니다. 또한 OneToMany, ManyToOne, One 및 Manya는 여전히 누락되었습니다. 현재 EF7에서 일대 다/다 대 일 관계를 가질 수있는 다른 가능성은 무엇입니까? –

+0

Entity <>(). HasMany(). WithOne(). ForeignKey() -syntax를 사용하여 성공했습니다. 참조 된 상위 모델 ("Blog")이 null 인 경우에도 최소한 사용자 정의 외래 키 ("BlogId"가 아니라 "SomethingOtherId")가 작동 중입니다. 이전에 "열"BlogId "오류를 찾을 수 없습니다". –

+1

모두 사라졌습니다. EF7 beta7. – Shimmy

0

EF7 베타 7에서는 엔티티 간의 관계를 정의하기위한 새로운 세트의 메소드가 도입되었습니다. 많은 관계 하나

modelBuilder.Entity<Post>() 
    .Reference(typeof(Blog), "Blog") 
    .InverseCollection("Posts") 
    .ForeignKey(new string[] { "BlogId" }); 

, Blog 엔터티 Post에서 .Reference(typeof(Blog), "Blog") 관계가 구성된다. 첫 번째 논쟁은 게시 대상 및 두 번째 논증이 탐색 속성의 이름 인 엔터티 유형입니다.

함께 .InverseCollection("Posts")과 일대 다 관계가 구성됩니다. 이 함수에 대한 불확실성은 탐색 컬렉션의 이름입니다.

.ForeignKey(new string[] { "BlogId" })으로 외래 키가 구성됩니다. 이 외래 키가 설정되지 않은 경우 섀도 외래 키가 자동으로 생성됩니다.

관련 문제