2013-04-04 43 views
2

我需要比較我的POCO類和我的數據庫上的內容。 我目前使用Microsoft RoslynMicrosoft.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;} 
} 

而且我也有表信息。我想知道在我的數據庫中我的POCO類(MyDate)中是否可以爲空,反之亦然。我想查看我的數據庫是否有Foreign Key到表Props,以及它是否爲我的POCO中不可爲空。正如我所說,它已經在今天工作,我只是想重寫代碼使用更有效的方式來維護。

EntityFramework是否提供某種API或任何東西?

系統信息

SQL Server 2008 R2 
Entity Framework 4.1 
C# 4.0 

感謝();

回答

2

如果我正在閱讀您的問題 - 您希望某些API在運行時從DbContext或EF/code-first獲取relationshiops和其他metadata信息?

迄今爲止我見過的最好的 - 而我們兩個能做的就是這個最好的...

How I can read EF DbContext metadata programmatically?

...看看,如果這能幫助你...

而且不客氣,如果你碰巧接觸到了一些新的和重要的資料片藏 張貼有(我們的意圖做它作爲這樣一個學科 一站式的問題)。

+0

感謝您的回答,那可能是一個開始的地方。這基本上是我需要的,除了我需要獲取實例化上下文之間的區別,或者甚至是POCO文件本身之間的差異,因爲我可以使用Roslyn,並與數據庫進行比較。我會看看你的答案,看看是否適合我。再次感謝。 – eestein 2013-04-04 16:26:30

+0

不客氣。那麼,這是當前的'運行時'快照 - 那些應該與Db'相對應'。但對於'真正的Db'狀態 - 您需要查詢Db - 使用系統表獲取表,關係,字段等,並構建「Left」模型(Db) - 然後與「Right」模型進行比較(你的代碼之一)。這就是我用Db代碼生成器簡化了一下,你分層次地進行比較,至少類似這樣的事情:) – NSGaga 2013-04-04 16:44:17

+0

我只是深入瞭解你的方法,但看到你實例化上下文,我決定不去那樣。問題是我檢查了poco文件並使用了我與表中信息進行比較的屬性。該應用程序非常大,使用這種方法我需要處理幾個不時會改變的自定義DLL。無論如何,你的回答讓我想到了,所以再次感謝你。 – eestein 2013-04-05 10:54:51