我正在尝试使用代码优先方法将 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 服务使用。
请告知如何进行或我做错了什么?