Мне нужно сравнить то, что находится на моих POCO
классах против моей базы данных. В настоящее время я использую Microsoft Roslyn
и Microsoft.SqlServer.SMO
и сравнивая данные, на мой взгляд, 'грубо'. Он работает отлично, но мне было интересно, есть ли лучший способ сделать это.Как сравнить класс POCO с базой данных?
Сегодня я должен скомпилировать файл, используя Roslyn, загрузить информацию о базе данных и сравнить то, что я хочу.
Допустим, у меня есть этот POCO
файл:
[Table("XPTO", Schema="ASD")]
public class MyPoco
{
public int PropId {get; set;}
public virtual Prop Prop {get; set;}
public DateTime? MyDate {get; set;}
}
И у меня также есть данные таблицы. Я хочу узнать, является ли значение nullable в моем классе POCO
(MyDate) равно нулю в моей базе данных и наоборот. Я хочу узнать, имеет ли моя база данных Foreign Key
таблицу Props
, и если она не является нулевой, как в моем POCO
.
Как я уже сказал, он уже работает сегодня, я просто хотел переписать код, чтобы использовать более эффективный способ даже поддерживать.
Предоставляет ли EntityFramework какой-либо API или что-нибудь еще?
System Info
SQL Server 2008 R2
Entity Framework 4.1
C# 4.0
Спасибо();
Спасибо за ваш ответ, это может быть место для начала. Это в основном то, что мне нужно, за исключением того, что мне нужно получить различия между созданным контекстом или даже самими файлами POCO, поскольку я могу использовать Roslyn для этого и сравнивать с БД. Я посмотрю на ваш ответ и посмотрю, работает ли это для меня. Еще раз спасибо. – eestein
Добро пожаловать. Ну, это текущий снимок «runtime» - те должны «соответствовать» Db. Но для состояния «реального Db» вам нужно запросить Db - использовать системную таблицу для извлечения таблиц, отношений, полей и т. Д. И построить свою модель «Left» (Db) - затем сравнить с моделью «Right» (ваш код один). Это то, что я немного упростил с помощью генераторов кода Db, вы идете иерархически и сравниваете, что-то вроде этого :) – NSGaga
Я просто углубился в ваш подход, но, увидев, что вы создаете контекст, я решил не идти таким образом , Проблема в том, что я проверяю файлы poco и используя атрибуты, которые я сравниваю с информацией из таблицы. Приложение довольно большое, и, используя этот подход, мне нужно будет обрабатывать несколько пользовательских DLL, которые время от времени будут меняться. Во всяком случае, ваш ответ заставил меня задуматься, поэтому еще раз спасибо. – eestein