Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Kromě izolovaných entit můžete také využít relace definované v modelu.
Návod
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);
await context.SaveChangesAsync();
}
Návod
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 = await context.Blogs.Include(b => b.Posts).FirstAsync();
var post = new Post { Title = "Intro to EF Core" };
blog.Posts.Add(post);
await context.SaveChangesAsync();
}
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 = await context.Posts.FirstAsync();
post.Blog = blog;
await context.SaveChangesAsync();
}
Odebrání relací
Relaci můžete odebrat nastavením navigační reference na null, nebo odebráním související entity z kolekce navigací.
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 = await context.Blogs.Include(b => b.Posts).FirstAsync();
var post = blog.Posts.First();
blog.Posts.Remove(post);
await context.SaveChangesAsync();
}