2010-07-31 76 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

相关问题