سلام
سوالتان را به تاپیک جدیدی منتقل کردم، اینطوری گمانم منظم تر است.
فرض کنید دوجدول داریم اول نویسنده ودوم کتاب و اینها با هم رابطه یک به چند دارند
DB SQL
CREATE TABLE Author
(
AuthorID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
FirstName nvarchar(50) NOT NULL,
LastName nvarchar(50) NOT NULL
);
CREATE TABLE Book
(
BookID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
AuthorID int,
Title nvarchar(50) NOT NULL,
PageCount int
);
در این حالت Entity ها را میتوان چنین تعریف کرد:
using System;
using System.Linq;
using System.Collections.Generic;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
[Table( "Author" )]
public class Author
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int AuthorID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[ForeignKey( "AuthorID" )]
public virtual ICollection<Book> Childs { get ; set ; }
}
[Table( "Book" )]
public class Book
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int BookID { get; set; }
public int AuthorID { get; set; }
public string Title { get; set; }
public int PageCount { get; set; }
[ForeignKey( "AuthorID" )]
public virtual Author Parent { get ; set ; }
}
واضح است که هر Book فقط یک Author و هر Author چندین Book دارد...
این یعنی رابطه یک به چند.
از دو خصیصه جدید Childs و Parent میتوانید هم در دستورات Linq و پرس وجوها و تولید خودکار SQL-SELECT استفاده کنید وهم در استفاده های عادی...
یافتن همه کتابهای بالای 200 صفحه آقای آرتور...
var books = dbcontext.Books.Where(r => r.PageCount >= 200 && r.Parent.FirstName == "Arthur" ).ToList();
دسترسی اطلاعات نویسنده 123 و کتابهایش
var author123 = dbcontext.Authors.FirstOrDefault(r => r.AuthorID == 123);
int author123_book_count = author123.Childs.Count;
foreach(Book b in author123.Childs)
{
...