コード ファースト アプローチを使用して 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 サービスによって使用されるため、純粋な配列へのマッピングが必要です。
続行する方法または私が間違っていることを教えてください。