Entity Framework теперь позволяет вам воспользоваться Entity Framework, не заставляя каждую часть вашего приложения быть в курсе Entity Framework, отделяя сущности от инфраструктуры. Вы можете создавать классы, которые могут сосредоточиться на своих бизнес-правилах, независимо от того, как они сохраняются (где хранятся данные и как данные передаются между вашими объектами).
Создание постоянных невежественных сущностей
В предыдущем абзаце описан метод, который не имеет глубоких знаний об источнике данных, которые он потребляет. Это подчеркивает сущность постоянного невежества, когда ваши классы и многие из наших прикладных уровней вокруг них не заботятся о том, как хранятся данные.
-
В версии Entity Framework .NET 3.5, если вы хотите использовать уже существующие классы, вы должны были изменить их, заставив их наследовать от EntityObject.
-
В .NET 4 это больше не нужно. Вам не нужно изменять свои объекты, чтобы они могли участвовать в операциях Entity Framework.
-
Это позволяет нам создавать приложения, охватывающие слабую связь и разделение интересов.
-
С помощью этих шаблонов кодирования ваши классы занимаются только своими собственными заданиями, и многие уровни вашего приложения, включая пользовательский интерфейс, не зависят от внешней логики, такой как API-интерфейсы Entity Framework, однако эти внешние API-интерфейсы могут взаимодействовать с нашими юридические лица.
В версии Entity Framework .NET 3.5, если вы хотите использовать уже существующие классы, вы должны были изменить их, заставив их наследовать от EntityObject.
В .NET 4 это больше не нужно. Вам не нужно изменять свои объекты, чтобы они могли участвовать в операциях Entity Framework.
Это позволяет нам создавать приложения, охватывающие слабую связь и разделение интересов.
С помощью этих шаблонов кодирования ваши классы занимаются только своими собственными заданиями, и многие уровни вашего приложения, включая пользовательский интерфейс, не зависят от внешней логики, такой как API-интерфейсы Entity Framework, однако эти внешние API-интерфейсы могут взаимодействовать с нашими юридические лица.
Существует два способа (подключен и отключен) при сохранении сущности с помощью Entity Framework. Оба способа имеют свое значение. В случае связанного сценария изменения отслеживаются контекстом, но в случае несвязанного сценария мы должны информировать контекст о состоянии сущности.
Связанные сценарии
Связанный сценарий — это когда объект извлекается из базы данных и изменяется в том же контексте. Для связанного сценария предположим, что у нас есть служба Windows, и мы выполняем некоторые бизнес-операции с этой сущностью, поэтому мы откроем контекст, пройдемся по всем сущностям, выполним наши бизнес-операции, а затем сохраним изменения в том же контексте, что и мы. открыл в начале.
Давайте рассмотрим следующий пример, в котором учащиеся извлекаются из базы данных и обновляют имя ученика, а затем сохраняют изменения в базе данных.
class Program { static void Main(string[] args) { using (var context = new MyContext()) { var studentList = context.Students.ToList(); foreach (var stdnt in studentList) { stdnt.FirstMidName = "Edited " + stdnt.FirstMidName; } context.SaveChanges(); //// Display all Students from the database var students = (from s in context.Students orderby s.FirstMidName select s).ToList<Student>(); Console.WriteLine("Retrieve all Students from the database:"); foreach (var stdnt in students) { string name = stdnt.FirstMidName + " " + stdnt.LastName; Console.WriteLine("ID: {0}, Name: {1}", stdnt.ID, name); } Console.ReadKey(); } } }
Когда приведенный выше код скомпилирован и выполнен, вы получите следующий вывод и увидите, что отредактированное слово прикреплено перед именем, как показано в следующем выводе.
Retrieve all Students from the database: ID: 1, Name: Edited Edited Alain Bomer ID: 2, Name: Edited Edited Mark Upston
Отключенные сценарии
Отключенный сценарий — это когда объект извлекается из базы данных и изменяется в другом контексте. Давайте предположим, что мы хотим отобразить некоторые данные на уровне представления, и мы используем какое-то n-уровневое приложение, поэтому было бы лучше открыть контекст, извлечь данные и, наконец, закрыть контекст. Поскольку здесь мы извлекли данные и закрыли контекст, извлеченные нами сущности больше не отслеживаются, и это отключенный сценарий.
Давайте посмотрим на следующий код, в котором новая отключенная сущность Student добавляется в контекст с помощью метода Add.
class Program { static void Main(string[] args) { var student = new Student { ID = 1001, FirstMidName = "Wasim", LastName = "Akram", EnrollmentDate = DateTime.Parse( DateTime.Today.ToString()) }; using (var context = new MyContext()) { context.Students.Add(student); context.SaveChanges(); //// Display all Students from the database var students = (from s in context.Students orderby s.FirstMidName select s).ToList<Student>(); Console.WriteLine("Retrieve all Students from the database:"); foreach (var stdnt in students) { string name = stdnt.FirstMidName + " " + stdnt.LastName; Console.WriteLine("ID: {0}, Name: {1}", stdnt.ID, name); } Console.ReadKey(); } } }
Когда приведенный выше код скомпилирован и выполнен, вы получите следующий вывод.