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