2010-07-31 45 views
0

我是C#和亞音速的新手。我試圖解決以下情況:SubSonic SimpleRepository存儲成員類

public class UnknownInt { 
    public int val; 
    public bool known; 
} 

public class Record { 
    public int ID; 
    public UnknownInt data; 
} 

我正在使用SimpleRepository。 有沒有一種方法,我可以得到UnknownInt序列化之前,將其存儲在SQL數據庫(也許作爲XML文本字段?)

我試圖建立一個問卷系統,其中用戶可以提供一個'整數'的答案,一個'未知'的答案,以及一個空答案(問題還沒有回答)

換句話說 - 我的UnknownInt類需要實現什麼接口才能符合條件並可轉換爲SubSonic 3.0 Simple Repository?

乾杯!

回答

1

我這樣做:

public class Record 
{ 
    public int ID {get;set;} 

    [EditorBrowsable(EditorBrowsableState.Never)] 
    public int UnknownIntValue {get;set;} 

    [EditorBrowsable(EditorBrowsableState.Never)] 
    public bool UnknownIntKnown {get;set;} 

    [SubSonicIgnore] 
    public UnknownInt UnknownInt 
    { 
     get 
     { 
      return new UnknownInt() 
      { 
       val = UnknownIntValue, 
       known = this.UnknownIntKnown 
      }; 
     } 
     set 
     { 
      this.UnknownIntValue = value.val; 
      this.UnknownIntKnown = value.known; 
     } 
    } 

} 

public struct UnknownInt 
{ 
    public readonly int Val; 
    public readonly bool Known; 

    public UnknownInt(int val, bool known) 
    { 
     this.Val = val; 
     this.Known = known; 
    } 

    public override string ToString() 
    { 
     return String.Format("{0} ({1})", 
      Val, Known == true ? "known" : "unknown"); 
    } 
    public override bool Equals(Object obj) 
    { 
     return obj is UnknownInt && this == (UnknownInt)obj; 
    } 
    public static bool operator ==(UnknownInt x, UnknownInt y) 
    { 
     return x.Val == y.Val && x.Known == y.Known; 
    } 
    public static bool operator !=(UnknownInt x, UnknownInt y) 
    { 
     return !(x == y); 
    } 

} 

的基本思想是要存儲用戶定義的類型,但是從智能感知(System.ComponentModel.EditorBrowsable屬性)隱藏的列。 比你有一個複雜的類型(我喜歡在這種情況下是一個結構,而不是一個類),從SubSonic的簡單存儲庫中隱藏。覆蓋和運算符重載是可選的,但使這種類型的工作更容易。

用法示例:

// 1. Step Create item1 
var item1 = new Record(); 
item1.ID = 1; 
item1.UnknownInt = new UnknownInt(1, true); 

// 2. Setp Create item2 
var item2 = new Record(); 
item2.ID = 2; 
item2.UnknownImt = new UnknownInt(1, false); 

if (item1.UnknownInt == item2.UnknownInt) 
    Console.WriteLine("???"); 
else 
    Console.WriteLine("Profit!!!"); 
+0

這似乎是一個解決方案,不幸的是,我已經以不太優雅的方式解決了這個問題。儘管如此,答案很好,對於後代來說也很棒! – qdot 2010-12-15 14:52:51

0

嘗試使用可空的int(int?)而不是你UnknownInt類 - 你可以通過亞音速存儲它。無需XML轉換!

+0

這是不幸的是沒有什麼,我找(我用System.Nullable 了很多在其他地方,我意識到這一點) 基本上,「空」值應該代表一個缺失的答案(即回答哪個統計模型應該報告哪些內容需要更新)。 「未知」答案是一個有效的答案(即非空),用戶查看了問題並決定不予答覆。 我可以通過創造性地使用超出可接受範圍的整數值來進行編碼(本質上,年齡-1爲'未知',年齡-2不想共享等),但這並不優雅。 – qdot 2010-08-02 09:22:00

相關問題