使用Orchard CMS,我正在处理记录和部分代理,但无法弄清楚如何将其保存到数据库中。事实上,我承认我甚至不知道如何获得我想要保存到这个范例中的项目。我最初使用enum
来做出选择:
MyEmum.cs
:
public enum Choices { Choice1, Choice2, Choice3, Choice4 }
MyRecord.cs
:
public virtual string MyProperty { get; set; }
MyPart.cs
:
public IEnumerable<string> MyProperty
{
get
{
if (String.IsNullOrWhiteSpace(Record.MyProperty)) return new string[] { };
return Record
.MyProperty
.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries)
.Select(r => r.Trim())
.Where(r => !String.IsNullOrEmpty(r));
}
set { Record.MyProperty = value == null ? null : String.Join(",", value); }
}
现在,在我的服务类中,我尝试了类似的东西:
public MyPart Create(MyPartRecord record)
{
MyPart part = Services.ContentManager.Create<MyPart>("My");
...
part.MyProperty = record.MyProperty; //getting error here
...
return part;
}
但是,我收到以下错误:Cannot implicitly convert 'string' to System.Collections.Generic.IEnumerable<string>'
基本上,我试图将复选框(一个或多个选项)中的选项保存为数据库中以逗号分隔的列表。
这甚至不能解决我如何使用enum
的问题。有什么想法吗?
对于某些背景:
我知道处理这种关系的适当方法是创建一个单独的表并使用IList<MyEnum>
。但是,这是一个简单的列表,我不打算用编辑来操作(实际上,在这种情况下没有使用驱动程序,因为我在前端使用控制器和路由处理它)。我只是捕获数据并在管理视图中重新显示它以用于统计/历史目的。我甚至可以考虑摆脱该部分(考虑以下帖子:Bertrand's Blog Post。
答案 0 :(得分:0)
应该是:
part.MyProperty = new[] {"foo", "bar"};
例如,。部件的setter将把值作为逗号分隔的字符串存储在记录的属性上,该字符串将保存到数据库中。
如果要使用枚举值,则应使用.NET在Enum上提供的Parse
和ToString
API。