2

我正在尝试使用代码优先方法将 Web 服务响应类(在服务引用中生成)映射到 SQL DB,但我遇到了以下问题:

目标类中的一些数据存储在纯数组中,如下示例所示:

public partial class Message
{
    public string Name { get; set; }
    public string Content { get; set; }
    public Tag[] Tags { get; set; }
}

public partial class Tag
{
    public string ShortTag { get; set; }
    public string FullTag { get; set; }        
}

为了满足代码优先要求,这些示例类被扩展,如下所示:

public partial class Message
{
    [XmlIgnore]
    [Key]
    public int Id { get; set; }

    [XmlIgnore]
    public ICollection<Tag> CTags
    {
        get { return Tags == null ? new Collection<Tag>() : Tags.ToList(); }
        set { Tags = value.ToArray(); }
    }
}

public partial class Tag
{
    [XmlIgnore]
    [Key]
    public int Id { get; set; }
}

DbContext 看起来像:

public class SampleContext: DbContext
{
    public DbSet<Message> Messages { get; set; }
    public DbSet<Tag> Tags { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<Message>().HasMany(x => x.Tags);
    }
}

数据库已成功生成并按预期显示。设置和保存消息和标签也可以,但检索总是给出空数组。

将上面的代码更改为:

public partial class Message
{
    [XmlIgnore]
    [Key]
    public int Id { get; set; }

    [XmlIgnore]
    public ICollection<Tag> CTags { get; set; }        
}

解决了这个问题,但我需要映射到纯数组,因为它在 SOAP 的 XML 序列化中被 web 服务使用。

请告知如何进行或我做错了什么?

4

0 回答 0