2

OK、これが何が起こっているのかです。WCFデータサービスとMVCアプリケーションの2つのアプリがあります。

2つのコレクションがあるタイプをCRUDしています。単純なタイプの

    [DataServiceKey("Id")]
    [ETag("ModifiedDate")]
    public class AllocationRule
    {

        public AllocationRule()
        {
            Zones = new List<Zone>();
        }

        public int Id { get; set; }

        public string Name { get; set; }

        public List<Zone> Zones { get; private set; }
   }

ゾーンはこのように見えます

    [DataServiceKey("Code")]
    [EntityPropertyMapping("Name", SyndicationItemProperty.Title, SyndicationTextContentKind.Plaintext, true)]
    [EntityPropertyMapping("ModifiedDate", SyndicationItemProperty.Updated, SyndicationTextContentKind.Plaintext, true)]
    [ETag("ModifiedDate")]
    public class Zone
    {
        public string Code { get; set; }

        public string Name { get; set; }

        public DateTime? ModifiedDate { get; set; }
    }

そのため、MVCサイトはそのようにオブジェクトを挿入しようとしています

var context = new ChannelData(new Uri(ConfigurationManager.AppSettings["DataServicesUri"]));
                    context.AddToAllocationRules(rule);
                    context.SaveChanges();

そうすると、ゾーンのコレクションはodata側では常にnullになり、MVC側では空になりません。

何か案は?まだローカル開発段階にあるため、フィドラーなどを使用してリクエストをスニッフィングすることはできません。

アップデート

winformsアプリを使用してこの同じデータ型をWCFデータサービスにポストバックする場合、これらのコレクションも表示されません。

ポストリクエストで迷子になっているようです。

サービスからデータを取得でき、$ expand()が機能します。

これがFiddler2のヘッダーです

<?xml version="1.0" encoding="utf-8"?><entry xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"><category term=" Data.Services.Entities.AllocationRule" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
<id /><title type="text">dfsdsdf</title><published>0001-01-01T00:00:00-05:00</published>
<updated>2012-09-18T15:44:36-04:00</updated><author><name />
</author><content type="application/xml"><m:properties><d:Amount m:type="Edm.Int32">50</d:Amount><d:CreatedBy m:null="true" />
<d:CreatedDate m:type="Edm.DateTime">0001-01-01T00:00:00</d:CreatedDate><d:EffectiveEndDate
m:type="Edm.DateTime">2012-12-18T15:44:30.1686832-05:00</d:EffectiveEndDate><d:EffectiveStartDate
m:type="Edm.DateTime">2012-09-19T15:44:30.1696833-04:00</d:EffectiveStartDate><d:Enabled
m:type="Edm.Boolean">true</d:Enabled><d:Finalized m:type="Edm.Boolean">false</d:Finalized><d:Id
m:type="Edm.Int32">0</d:Id><d:ModifiedBy m:null="true" /><d:ModifiedDate m:type="Edm.DateTime"
m:null="true" />
<d:Name>dfsdsdf</d:Name><d:UnitOfMeasure>hours</d:UnitOfMeasure></m:properties></content></entry>
4

1 に答える 1

1

正しく追加されているルールオブジェクトのコレクションにZoneオブジェクトを追加したと思いますか?それがあなたがしたすべてであるならば、これは予想される振る舞いです。WCF DSクライアントは、ナビゲーションプロパティの変更を自動的に処理しません。次のいずれかを行う必要があります。

追加するすべてのZoneオブジェクトでcontext.AddObjectを呼び出し、context.SetLinkを呼び出して2つのオブジェクト間の関係を作成します。

または、context.AddRelatedObjectを使用してZoneオブジェクトを追加し、一度に関係を作成できます。

于 2012-09-18T20:55:59.023 に答える