Kapcsolódó adatok mentése

Az izolált entitások mellett a modellben definiált kapcsolatokat is használhatja.

Jótanács

A cikk mintáját a GitHubon tekintheti meg.

Új entitások diagramjának hozzáadása

Ha több új kapcsolódó entitást hoz létre, az egyik környezethez való hozzáadása automatikusan a többi hozzáadását is eredményezi.

Az alábbi példában a blog és három kapcsolódó bejegyzés is be lesz szúrva az adatbázisba. A bejegyzések azért találhatók és lettek hozzáadva, mert a Blog.Posts navigációs tulajdonságon keresztül érhetők el.

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

Jótanács

Az EntityEntry.State tulajdonság használatával csak egyetlen entitás állapotát állíthatja be. Például: context.Entry(blog).State = EntityState.Modified.

Ha a környezet által már nyomon követett entitás navigációs tulajdonságából hivatkozik egy új entitásra, az entitást a rendszer felderíti és beszúrja az adatbázisba.

Az alábbi példában az post entitás azért lesz beszúrva, mert hozzá lesz adva az Postsblog adatbázisból lekért entitás tulajdonságához.

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

Kapcsolatok módosítása

Ha módosítja egy entitás navigációs tulajdonságát, a megfelelő módosítások az adatbázis idegenkulcs-oszlopában lesznek.

Az alábbi példában az post entitás úgy van frissítve, hogy az az új blog entitáshoz tartozik, mert a Blog navigációs tulajdonsága úgy van beállítva, hogy blog-re mutasson. Vegye figyelembe, hogy blog is be lesz szúrva az adatbázisba, mert ez egy új entitás, amelyre az entitás navigációs tulajdonsága hivatkozik, amit már nyomon követ a kontextus (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();
}

Kapcsolatok eltávolítása

A kapcsolatot úgy távolíthatja el, hogy hivatkozási navigációt nullállít be, vagy eltávolítja a kapcsolódó entitást egy gyűjteménynavigációból.

A kapcsolat eltávolítása a kapcsolatban konfigurált kaszkádolt törlési viselkedésnek megfelelően mellékhatásokat okozhat a függő entitásra nézve.

A szükséges kapcsolatok esetében alapértelmezés szerint kaszkádolt törlési viselkedés van konfigurálva, és a gyermek/függő entitás törlődik az adatbázisból. Választható kapcsolatok esetén a kaszkádolt törlés alapértelmezés szerint nincs konfigurálva, de az idegenkulcs-tulajdonság értéke null lesz.

A szükséges és nem kötelező kapcsolatok című témakörben megtudhatja , hogyan konfigurálható a kapcsolatok szükségessége.

További részletekért a kaszkádolt törlési viselkedések működéséről, azok explicit konfigurálásáról és konvenciók szerinti kiválasztásáról lásd a Kaszkádolt törlés szócikket.

Az alábbi példában a kaszkádolt törlés van konfigurálva a Blog és Post közötti kapcsolaton, így az post entitás törlődik az adatbázisból.

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