【发布时间】:2012-02-01 00:09:35
【问题描述】:
我有一个 EntiyFramework 项目,我将其设置存储在一个表中。
设置支持不同类型,但最终将设置存储在字符串中,并转换为特定类型(GUID、字符串、TimeSpan 等)。
一切正常,我只是想检查一下:
有没有更好的方法在表格中存储应用程序设置(我可以有多家公司,每个公司都有不同的设置)?
-
如果某个设置(例如“default_reply_type”,类型 GUID)引用了数据库中的另一个对象主键怎么办?
可能会有一些这样的设置引用其他对象,并且将来可能会增加。
我很欣赏架构中没有明确的引用集成检查,但我可以将其作为业务逻辑的一部分手动实现 - 这是可以的还是令人讨厌的软糖?
问候,
克里斯
代码如下。
public abstract class Setting
{
[Key, Column(Order = 0)]
public string SettingName { get; set; }
[Key, Column(Order = 1)]
public Guid CompanyID { get; set; }
public virtual Company Company { get; set; }
public string SettingValue { get; set; }
public string Description { get; set; }
public virtual void ConvertToType(string value, ref object outvalue)
{
outvalue = Convert.ChangeType(value, outvalue.GetType());
}
public virtual string ConvertToString(object value, Type type)
{
return Convert.ChangeType(value, typeof(string)).ToString();
}
public DateTime? UpdatedDateUTC { get; set; }
}
public class StringSetting : Setting
{
// no need for any overrides as string is base type
}
public class TimeSpanSetting : Setting
{
public override void ConvertToType(string value, ref object outvalue)
{
TimeSpan ts = new TimeSpan(Convert.ToInt64(value));
outvalue = ts;
}
public override string ConvertToString(object value, Type type)
{
if(type != typeof(TimeSpan))
throw new InvalidCastException(); // throw an error!
return ((TimeSpan)value).Ticks.ToString();
}
}
【问题讨论】:
标签: c# entity-framework settings