Ukládání souvisejících dat
Kromě izolovaných entit můžete také využít relace definované v modelu.
Tip
Ukázku tohoto článku najdete na GitHub.
Přidání grafu nových entit
Pokud vytvoříte několik nových souvisejících entit, přidání jedné z nich do kontextu způsobí přidání i ostatních entit.
V následujícím příkladu se všechny blogové a tři související příspěvky vloží do databáze. Příspěvky se naštou a přidávají, protože jsou dosažitelné prostřednictvím vlastnosti Blog.Posts
navigace.
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
Pomocí vlastnosti EntityEntry.State nastavte stav 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, entita bude zjištěna a vložena do databáze.
V následujícím příkladu se post
entita vloží, Posts
blog
protože se přidá do vlastnosti 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 vlastnost navigace entity, budou provedeny odpovídající změny sloupce cizího klíče v databázi.
V následujícím příkladu se entita post
aktualizuje blog
tak, aby patřila do nové entity, Blog
protože její navigační vlastnost je nastavená tak, aby odkazovat na blog
. Všimněte blog
si, že se také vloží do databáze, 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 referenční navigace na null
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í konfiguruje chování kaskádového odstranění a z databáze se odstraní podřízené/závislé entity. Pro volitelné relace 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 je možné nakonfigurovat požadovanost relací, najdete v tématu Povinné a Volitelné relace.
Další podrobnosti o fungování chování kaskádového odstranění, způsobu jejich explicitní konfigurace a způsobu jejich výběru podle konvence najdete v tématu Kaskádové odstranění.
V následujícím příkladu se pro relaci mezi a Blog
Post
konfiguruje kaskádové odstranění, post
aby se entita odstranila 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();
}