2013-04-04 3 views
2

Мне нужно сравнить то, что находится на моих 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 

Спасибо();

ответ

2

Если я правильно читаю ваш вопрос - вы хотите, чтобы какой-либо API получал relationshiops и другие metadata информацию из DbContext или EF/code-first во время выполнения?

Лучшее, что я видел до сих пор - и лучшее, два из нас мог сделать это ...

How I can read EF DbContext metadata programmatically?

... посмотрим, если это может помочь вам ...

и вы можете разместить там, если вам случится прийти во владение какого-то нового и жизненно важной части информации (мы сделали это с намерением служить один-стоп вопрос для субъектов, как это).

+0

Спасибо за ваш ответ, это может быть место для начала. Это в основном то, что мне нужно, за исключением того, что мне нужно получить различия между созданным контекстом или даже самими файлами POCO, поскольку я могу использовать Roslyn для этого и сравнивать с БД. Я посмотрю на ваш ответ и посмотрю, работает ли это для меня. Еще раз спасибо. – eestein

+0

Добро пожаловать. Ну, это текущий снимок «runtime» - те должны «соответствовать» Db. Но для состояния «реального Db» вам нужно запросить Db - использовать системную таблицу для извлечения таблиц, отношений, полей и т. Д. И построить свою модель «Left» (Db) - затем сравнить с моделью «Right» (ваш код один). Это то, что я немного упростил с помощью генераторов кода Db, вы идете иерархически и сравниваете, что-то вроде этого :) – NSGaga

+0

Я просто углубился в ваш подход, но, увидев, что вы создаете контекст, я решил не идти таким образом , Проблема в том, что я проверяю файлы poco и используя атрибуты, которые я сравниваю с информацией из таблицы. Приложение довольно большое, и, используя этот подход, мне нужно будет обрабатывать несколько пользовательских DLL, которые время от времени будут меняться. Во всяком случае, ваш ответ заставил меня задуматься, поэтому еще раз спасибо. – eestein

 Смежные вопросы

  • Нет связанных вопросов^_^