2012-03-25 56 views
0

目前我使用繼承的DbContext類包含DbSet <T>成員將POCO對象存儲到數據庫中。這對'編譯時間已知'類和它們的結構很有效。自定義POCO對象到表

現在我有一個像

public class ResourceSet 
{ 
    public long Id 
    { 
     get; 
     set; 

    } 
    public long OwnerId 
    { 
     get; 
     set; 
    } 

    public double[] Resources 
    { 
     get; 
     set; 
    } 
} 

一類,並想將其存儲到數據庫中的方案:

標識,OWNERID,RES_1,RES_2,RES_3,...(視大小而定的資源,這將在程序啓動時修復)。

  • 目前我使用EFCodeFirst的CTP5
  • DbSet <的ResourceSet >失敗,當然。它不支持索引屬性。
  • 我想避免的.edmx文件

我的問題:

是否有可能創建一個代理/包裝/轉換類,其中陣列映射的資源投入到Res_X列。你有沒有在文件中提示我可以開始的提示?

用於搜索'Id'和'OwnerId'的LINQ仍然是可能的,對於資源,這是沒有必要的。

回答

2

如果在Linq查詢中不需要Resources,則可以將它映射到字符串支持屬性,然後將其保存回數據庫中。

public double[] Resources 
{ 
    get 
    { 
     var result = from r in ResourceString.Split(new string[] {";"}, StringSplitOptions.RemoveEmptyEntries) 
        select double.Parse(r); 

     return result.ToArray(); 
    } 
    set 
    { 

     ResourceString = string.Empty; 
     foreach (var d in value) 
     { 
      ResourceString += d + ";"; 
     } 
    } 
} 

private string ResourceString 
{ 
    get; 
    set; 
} 

如果您更新實體框架到最新版本(槽的NuGet)和指定的資源不映射就可以工作了。

+0

'ResourceString'應該是'public'來映射,不是嗎? – Slauma 2012-03-25 15:39:07

+0

非常聰明的解決方案!感謝提示。但我希望將這些值作爲列...我想我會直接在這個問題上使用DbConnection並跳過EF。還是有更聰明的方法,避免創建Sql-Statements – UllaDieTrulla 2012-03-25 15:49:31