Ukládání souvisejících dat
Kromě izolovaných entit můžete také využít relace definované v modelu.
Tip
Ukázku pro tento článek najdete na GitHubu.
Přidání grafu nových entit
Pokud vytvoříte několik nových souvisejících entit, přidání jednoho z nich do kontextu způsobí také přidání ostatních entit.
V následujícím příkladu se do databáze vloží blog a tři související příspěvky. Příspěvky jsou nalezeny a přidány, protože jsou dostupné prostřednictvím Blog.Posts
navigační vlastnosti.
using (var context = new BloggingContext())
{
var blog = new Blog
{
Url = "http://blogs.msdn.com/dotnet",
Posts = new List<Post>
{
new Post { Title = "Intro to C#" },
new Post { Title = "Intro to VB.NET" },
new Post { Title = "Intro to F#" }
}
};
context.Blogs.Add(blog);
context.SaveChanges();
}
Tip
Vlastnost EntityEntry.State slouží k nastavení stavu pouze jedné entity. Například, context.Entry(blog).State = EntityState.Modified
.
Přidání související entity
Pokud odkazujete na novou entitu z navigační vlastnosti entity, která je již sledována kontextem, bude entita zjištěna a vložena do databáze.
V následujícím příkladu se entita post
vloží, protože je přidána do Posts
vlastnosti blog
entity, která byla načtena z databáze.
using (var context = new BloggingContext())
{
var blog = context.Blogs.Include(b => b.Posts).First();
var post = new Post { Title = "Intro to EF Core" };
blog.Posts.Add(post);
context.SaveChanges();
}
Změna relací
Pokud změníte navigační vlastnost entity, provede se odpovídající změny ve sloupci cizího klíče v databázi.
V následujícím příkladu je entita aktualizována post
tak, aby patřila do nové blog
entity, protože její Blog
navigační vlastnost je nastavena tak, aby odkazovala na blog
. Všimněte si, že se také vloží do databáze, blog
protože se jedná o novou entitu, na kterou odkazuje navigační vlastnost entity, která je již sledována kontextem (post
).
using (var context = new BloggingContext())
{
var blog = new Blog { Url = "http://blogs.msdn.com/visualstudio" };
var post = context.Posts.First();
post.Blog = blog;
context.SaveChanges();
}
Odebrání relací
Relaci můžete odebrat nastavením navigačního panelu odkazu na null
související entitu nebo odebráním související entity z navigace v kolekci.
Odebrání relace může mít vedlejší účinky na závislou entitu podle chování kaskádového odstranění nakonfigurovaného v relaci.
Ve výchozím nastavení se u požadovaných relací nakonfiguruje kaskádové odstranění a podřízená/závislá entita se z databáze odstraní. U volitelných relací není kaskádové odstranění ve výchozím nastavení nakonfigurováno, ale vlastnost cizího klíče bude nastavena na hodnotu null.
Informace o tom, jak lze nakonfigurovat požadovanou a volitelnou relaci, najdete v tématu Povinné a Volitelné relace .
Další podrobnosti o tom, jak kaskádové chování odstranění funguje, jak je lze explicitně nakonfigurovat a jak jsou vybrány podle konvence, najdete v tématu Kaskádové odstranění .
V následujícím příkladu je kaskádové odstranění nakonfigurováno pro relaci mezi Blog
a Post
, takže post
entita je odstraněna z databáze.
using (var context = new BloggingContext())
{
var blog = context.Blogs.Include(b => b.Posts).First();
var post = blog.Posts.First();
blog.Posts.Remove(post);
context.SaveChanges();
}