شروع به کار با EF Core 1.0 - قسمت 7 - بررسی رابطهی One-to-Many
نویسنده: وحید نصیری
تاریخ: ۱۳۹۵/۰۶/۰۱ ۱۵:۱۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
dotnet ef dbcontext scaffold "Data Source=(local);Initial Catalog=BloggingCore2016;Integrated Security = true" Microsoft.EntityFrameworkCore.SqlServer -o Entities --context MyDBDataContext --verbose
using System;
using System.Collections.Generic;
namespace Core1RtmEmptyTest.Entities
{
public partial class Blog
{
public Blog()
{
Post = new HashSet<Post>();
}
public int BlogId { get; set; }
public string Url { get; set; }
public virtual ICollection<Post> Post { get; set; }
}
} using System;
using System.Collections.Generic;
namespace Core1RtmEmptyTest.Entities
{
public partial class Post
{
public int PostId { get; set; }
public string Content { get; set; }
public string Title { get; set; }
public virtual Blog Blog { get; set; }
public int BlogId { get; set; }
}
} using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;
namespace Core1RtmEmptyTest.Entities
{
public partial class MyDBDataContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Data Source=(local);Initial Catalog=BloggingCore2016;Integrated Security = true");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>(entity =>
{
entity.Property(e => e.Url).IsRequired();
});
modelBuilder.Entity<Post>(entity =>
{
entity.HasOne(d => d.Blog)
.WithMany(p => p.Post)
.HasForeignKey(d => d.BlogId);
});
}
public virtual DbSet<Blog> Blog { get; set; }
public virtual DbSet<Post> Post { get; set; }
}
} public virtual Blog Blog { get; set; } public virtual ICollection<Post> Post { get; set; } <primary key property name> <navigation property name><primary key property name> <principal entity name><primary key property name>
public virtual Blog Blog { get; set; }
public int BlogId { get; set; } modelBuilder.Entity<Post>(entity =>
{
entity.HasOne(d => d.Blog)
.WithMany(p => p.Post)
.HasForeignKey(d => d.BlogId);
}); dotnet ef dbcontext scaffold "Data Source=(local);Initial Catalog=BloggingCore2016;Integrated Security = true" Microsoft.EntityFrameworkCore.SqlServer -o Entities --context MyDBDataContext --verbose -a
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Core1RtmEmptyTest.Entities
{
public partial class Blog
{
public Blog()
{
Post = new HashSet<Post>();
}
public int BlogId { get; set; }
[Required]
public string Url { get; set; }
[InverseProperty("Blog")]
public virtual ICollection<Post> Post { get; set; }
}
} using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Core1RtmEmptyTest.Entities
{
public partial class Post
{
public int PostId { get; set; }
public string Content { get; set; }
public string Title { get; set; }
[ForeignKey("BlogId")]
[InverseProperty("Post")]
public virtual Blog Blog { get; set; }
public int BlogId { get; set; }
}
} using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;
namespace Core1RtmEmptyTest.Entities
{
public partial class MyDBDataContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Data Source=(local);Initial Catalog=BloggingCore2016;Integrated Security = true");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
}
public virtual DbSet<Blog> Blog { get; set; }
public virtual DbSet<Post> Post { get; set; }
}
} [ForeignKey("BlogId")]
[InverseProperty("Post")]
public virtual Blog Blog { get; set; }
public int BlogId { get; set; } [InverseProperty("Blog")]
public virtual ICollection<Post> Post { get; set; } public virtual Blog Blog { get; set; } var firstPost = context.Post.First(); Console.WriteLine(firstPost.Blog.Url);
System.NullReferenceException Object reference not set to an instance of an object.
var firstPost = context.Post.Include(x => x.Blog).First(); Console.WriteLine(firstPost.Blog.Url);
var blogs = context.Blogs
.Include(blog => blog.Posts)
.Include(blog => blog.Owner)
.ToList(); var blogs = context.Blogs
.Include(blog => blog.Posts)
.ThenInclude(post => post.Author)
.ToList(); var blogs = context.Blogs
.Include(blog => blog.Posts)
.ThenInclude(post => post.Author)
.ThenInclude(author => author.Photo)
.ToList(); var blogs = context.Blogs
.Include(blog => blog.Posts)
.ThenInclude(post => post.Author)
.ThenInclude(author => author.Photo)
.Include(blog => blog.Owner)
.ThenInclude(owner => owner.Photo)
.ToList(); var blogs = context.Blogs
.Include(blog => blog.Posts)
.Select(blog => new
{
Id = blog.BlogId,
Url = blog.Url
})
.ToList(); CONSTRAINT [FK_Post_Blog_BlogId] FOREIGN KEY ([BlogId]) REFERENCES [Blog] ([BlogId]) ON DELETE CASCADE
modelBuilder.Entity<Post>()
.HasOne(p => p.Blog)
.WithMany(b => b.Posts)
.OnDelete(DeleteBehavior.Cascade); modelBuilder.Entity<Post>()
.HasOne(p => p.Blog)
.WithMany(b => b.Posts)
.IsRequired(); //OnModelCreating();
foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
{
relationship.DeleteBehavior = DeleteBehavior.Restrict;
} protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.UseLazyLoadingProxies()
.UseSqlServer(myConnectionString); .AddDbContext<BloggingContext>(
b => b.UseLazyLoadingProxies()
.UseSqlServer(myConnectionString)); public class Blog
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Post> Posts { get; set; }
}
public class Post
{
public int Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public virtual Blog Blog { get; set; }
} public class Blog
{
private ICollection<Post> _posts;
public Blog()
{
}
private Blog(ILazyLoader lazyLoader)
{
LazyLoader = lazyLoader;
}
private ILazyLoader LazyLoader { get; set; }
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Post> Posts
{
get => LazyLoader?.Load(this, ref _posts);
set => _posts = value;
}
}
public class Post
{
private Blog _blog;
public Post()
{
}
private Post(ILazyLoader lazyLoader)
{
LazyLoader = lazyLoader;
}
private ILazyLoader LazyLoader { get; set; }
public int Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public Blog Blog
{
get => LazyLoader?.Load(this, ref _blog);
set => _blog = value;
}
} public class Location {
[Key]
public int Id { get; set; }
[Required]
public string LocationName { get; set; }
public virtual ICollection<User> Users { get; set; }
public virtual ICollection<Person> People { get; set; }
}
public class Person {
[Key]
public int Id { get; set; }
[MaxLength (250)]
[Required]
public string LastName { get; set; }
[MaxLength (250)]
[Required]
public string FirstName { get; set; }
public int? UserId { get; set; }
public virtual User User { get; set; }
public int? LocationId { get; set; }
public virtual Location Location { get; set; }
}
public class User {
[Key]
public int Id { get; set; }
[Required]
[MaxLength (250)]
public string LastName { get; set; }
[Required]
[MaxLength (250)]
public string FirstName { get; set; }
[Required]
[MaxLength (250)]
public string UserName { get; set; }
[Required]
[MaxLength (250)]
public string Password { get; set; }
public int? LocationId { get; set; }
public virtual Location Location { get; set; }
public virtual ICollection<Person> People { get; set; }
}