2011-12-08 12 views
0

我還沒有見過它,但我想知道Code First是否實現了here中描述的Translate方法。我目前使用的EFExtensions項目(修改與代碼第一次使用)使用Materialise的方法,但我認爲這種方法具有以下優點:EF Code First有這個翻譯<T>方法嗎?

  • 大概知道如何處理基礎上的映射,而不是複雜類型做對財產名稱做出假設。
  • 可能返回對象代理,而不是指定的實際T

有沒有人對這種方法有足夠的瞭解來評論我的假設,並且有人知道這是否適用於Code First?

+2

我不完全確定它是否可以工作,但是您是否已經嘗試從您的DbContext訪問您的ObjectContext,然後調用Translate函數? –

回答

2

剛剛嘗試過。這個例子是在C#中

using(YourDbContext ctx = new YourDbContext()) { 
    ObjectContext x = ((IObjectContextAdapter)ctx).ObjectContext; 

    var conn = ctx.Database.Connection; 

    conn.Open(); 

    using (IDbCommand cmd = conn.CreateCommand()) 
    { 
    cmd.CommandText = "select * from YourType_Table"; 
    using (DbDataReader reader = (DbDataReader)cmd.ExecuteReader()) 
    { 
     YourType[] result = x.Translate<YourType>(reader).ToArray(); 
     Console.WriteLine(result.Length); 
    } 
    } 
} 

關於你的問題:

  • 僅支持基本類型。對於複雜類型,它會拋出一個InvalidOperationException
  • 返回的對象是代理類型。
+0

太棒了。感謝您花時間測試一下! – Ocelot20