0

使用 Orchard CMS,我正在处理记录和部分代理,但无法弄清楚如何将其保存到数据库中。事实上,我承认我什至不知道如何将我试图保存的项目放入这个范例中。我最初使用enum's 进行选择:

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>. 然而,这是一个简单的列表,我不打算通过编辑来操作(事实上,在这个场景中没有使用驱动程序,因为我在前端使用控制器和路由处理这个)。我只是为了统计/历史目的捕获数据并在管理视图中重新显示它。我什至可以考虑去掉 Part(考虑以下帖子:Bertrand 的博客文章

4

1 回答 1

0

它应该是:

part.MyProperty = new[] {"foo", "bar"};

例如。该部分的设置器会将记录属性上的值存储为逗号分隔的字符串,该字符串将持久保存到数据库中。

如果要使用枚举值,则应使用 .NET 在 Enum 上提供的ParseToStringAPI。

于 2012-12-29T22:30:46.437 回答