İlgili Verileri KaydetmeSaving Related Data

Yalıtılmış varlıklara ek olarak, modelinizde tanımlanan ilişkilerden de yararlanabilirsiniz.In addition to isolated entities, you can also make use of the relationships defined in your model.

İpucu

Bu makalenin örneğini GitHub'da görüntüleyebilirsiniz.You can view this article's sample on GitHub.

Yeni varlıkların grafiği eklemeAdding a graph of new entities

Birkaç yeni ilgili varlık oluşturursanız, bunlardan birini bağlama eklemek diğerlerinin de eklenmesine neden olur.If you create several new related entities, adding one of them to the context will cause the others to be added too.

Aşağıdaki örnekte, blog ve ilgili üç gönderi veritabanına eklenir.In the following example, the blog and three related posts are all inserted into the database. Gönderiler bulunur ve eklenir, çünkü Blog.Posts gezinti özelliği üzerinden erişilebilir.The posts are found and added, because they are reachable via the Blog.Posts navigation property.

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

İpucu

EntityEntry.State özelliğini kullanarak tek bir varlığın durumunu ayarlayın.Use the EntityEntry.State property to set the state of just a single entity. Örneğin, context.Entry(blog).State = EntityState.Modified.For example, context.Entry(blog).State = EntityState.Modified.

Zaten bağlam tarafından izlenen bir varlığın gezinti özelliğinden yeni bir varlık başvurursanız, varlık keşfedilir ve veritabanına eklenir.If you reference a new entity from the navigation property of an entity that is already tracked by the context, the entity will be discovered and inserted into the database.

Aşağıdaki örnekte, post veritabanından getirilen Posts blog varlığın özelliğine eklendiği için varlık eklenir.In the following example, the post entity is inserted because it is added to the Posts property of the blog entity which was fetched from the database.

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

İlişkileri değiştirmeChanging relationships

Bir varlığın gezinti özelliğini değiştirirseniz, karşılık gelen değişiklikler veritabanındaki yabancı anahtar sütununa yapılır.If you change the navigation property of an entity, the corresponding changes will be made to the foreign key column in the database.

Aşağıdaki örnekte, post Blog gezinti özelliği blog' ye blog işaret etmek üzere ayarlandığından, varlık yeni varlığa ait olacak şekilde güncelleştirilirIn the following example, the post entity is updated to belong to the new blog entity because its Blog navigation property is set to point to blog. blog Zaten bağlam tarafından izlenen bir varlığın gezinti özelliği tarafından başvurulan yeni bir varlık olduğundan veritabanına da eklenecektirpostunutmayın ( ).Note that blog will also be inserted into the database because it is a new entity that is referenced by the navigation property of an entity that is already tracked by the context (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();
}

İlişkileri kaldırmaRemoving relationships

Bir başvuru navigasyonuna bir başvuru nullgezintisi ayarlayarak veya ilgili varlığı bir koleksiyon gezintisinden kaldırarak ilişkiyi kaldırabilirsiniz.You can remove a relationship by setting a reference navigation to null, or removing the related entity from a collection navigation.

İlişkide yapılandırılan basamaklı silme davranışına göre, bir ilişkinin kaldırılması bağımlı varlık üzerinde yan etkilere sahip olabilir.Removing a relationship can have side effects on the dependent entity, according to the cascade delete behavior configured in the relationship.

Varsayılan olarak, gerekli ilişkiler için basamaklı silme davranışı yapılandırılır ve alt/bağımlı varlık veritabanından silinir.By default, for required relationships, a cascade delete behavior is configured and the child/dependent entity will be deleted from the database. İsteğe bağlı ilişkiler için basamaklı silme varsayılan olarak yapılandırılamaz, ancak yabancı anahtar özelliği null olarak ayarlanır.For optional relationships, cascade delete is not configured by default, but the foreign key property will be set to null.

İlişkilerin gerekliliğinin nasıl yapılandırılabildiğini öğrenmek için Gerekli ve İsteğe Bağlı İlişkiler'e bakın.See Required and Optional Relationships to learn about how the requiredness of relationships can be configured.

Basamaklı silme davranışlarının nasıl çalıştığı, bunların nasıl açıkça yapılandırılabildiği ve kuralkuralı tarafından nasıl seçildikleri hakkında daha fazla bilgi için Basamaklı Silme'ye bakın.See Cascade Delete for more details on how cascade delete behaviors work, how they can be configured explicitly and how they are selected by convention.

Aşağıdaki örnekte, bir basamaklı silme arasındaki Blog ilişki Postüzerinde yapılandırılır ve , böylece post varlık veritabanından silinir.In the following example, a cascade delete is configured on the relationship between Blog and Post, so the post entity is deleted from the database.

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