2012-11-13 57 views
3

我試圖使用Entity Framework來存儲&檢索一些對象,其中一個屬性是我無法控制的類。在實體框架對象中使用外部對象

對於這個問題描述起見讓我們說我想堅持Arc對象:

class Arc { 
    public Angle start { get; set; } 
    public Angle end { get; set; } 
    // ... other properties ... 
} 

,但我沒有給Angle源,其中有一個公共接口是這樣的寫訪問:

class Angle { 
    public enum Unit { Radians, Degrees }; 
    public Angle(double value, Unit units); // constructor 
    public float Radians() { get; } // returns angle value in radians 
    public float Degrees() { get; } // returns angle value in degrees 
} 

我相信我能做到的的DbContext的OnModelCreating()方法的角度字段映射到數據庫中的浮動列,但儘管閱讀MSDN文檔的東西,我不是b我能夠弄清楚我需要做些什麼來完成這個任務。

不知何故,我需要閱讀角的度(或弧度)存儲對象時屬性,然後檢索它們時使用該值構造一個新的Angle。我怎樣才能做到這一點?

編輯:我認爲一個貧窮的解決方案,這是使視角特性沒有映射,並添加額外的屬性映射每個做轉換,像這樣的:

public float start_degrees { get { return start.Degrees; } 
           set { start = new Angle(value, Angle.Degrees); } 
          } 

但我寧願避免這種情況,因爲我的對象有許多這種性質的屬性,所以這意味着要增加更多。我希望有一個更簡單的解決方案。

回答

1

大概我誤會了這個問題,但讓我試試看。這個怎麼樣?

public class MyOwnTypeOfAngle 
{ 

    public MyOwnTypeOfAngle(Angle input) 
    { 
     this.Radians = input.Radians; 
     this.Degrees = input.Degrees; 
    } 


    public double Radians { get; set; } 
    public double Degrees { get; set; } 
} 

在任何情況下,當你想改變你的EF的DbSets的配置,設置如下:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Configurations.Add(new MyNewConfigurationType()); 
    } 

UPDATE 好吧,我沒有得到這樣深入配置,但我希望這可能會導致你在正確的方向:

class MyNewConfigurationType : EntityTypeConfiguration<Arc> 
{ 
    public MyNewConfigurationType() 
    { 

     Ignore<Angle>(y => y.start); 
     Ignore<Angle>(y => y.end); 

     Property<float>(x => x.start.Degrees).HasColumnName("myStartDegrees"); 
     Property<float>(x => x.end.Degrees).HasColumnName("MyEndDegrees"); 
    } 
} 
+0

感謝您的答覆,b我不認爲它解決了我的問題。如果我正確地理解了你,你建議我把現有的Angle類封裝在一個我控制的類中,但不幸的是,在這種情況下這並不實際(這裏有很多這樣的類,它們並不像Angle例子那麼簡單我構建)。在讀/寫數據庫時,我希望有一些插入轉換方法或類似於「(反序列化)」的方法。 (雙浮動的東西只是我的問題中的一個錯誤;想象一切都是相同的精度,我會更新我的問題)。 –

+0

啊,好的。這似乎是解決方案的一半 - 據我所知,您的解決方案將角度寫入數據庫作爲一定的度數,這是完美的。但是反過來呢?讀取數據時,我的根對象需要以正確構造的Angle屬性結束,因此在某些時候,Angle構造函數需要使用正確的參數調用。 –