EF 7 알파에 외래 키를 추가하는 방법

entity-framework-core

문제

EF 7 alpha3에서 일대일 관계를 만드는 방법은 무엇입니까?

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

누구든지 그것에 대해 밝힐 수 있습니까?

수락 된 답변

최근까지는 관계를 정의하기위한 모델 빌더 API가 없었습니다. 대신 기본 modelBuilder.Model 객체를 조작 modelBuilder.Model 합니다. 다음은 일대 다 관계의 예입니다.

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

현재 API대해 생각하는 현재 (2014-07-31 기준)에 대해 자세히 알아볼 수 있습니다. 최종 결과는 다음과 같습니다.

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

인기 답변

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

일대 다 관계의 경우,

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

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

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

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




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.