0

だから私は自分のWCF Dataserviceを稼働させましたが、複数のテーブルに挿入できるようにしたかったのです - 簡単な例で説明する方が簡単でしょう:

テーブル:

tbl_ショップ

  • ShopID (主キー)
  • 位置
  • オーナー

tbl_製品

  • ProductID (主キー)
  • ショップID
  • 商品名
  • 商品価格

1 ショップには多くの商品があります。1 つの商品は 1 つのストアにのみ関連付けることができます。

ストアド プロシージャを使用して、Shop_ID で tbl_Products と tbl_Shop に参加して返すことを計画しています。

私がしたいシナリオがあります:

  • ステップ 1) tbl_Shop に新しいエントリを作成する
  • ステップ 2) いくつかの商品を作成し、ステップ 1 で作成したショップに関連付けます

このセットアップを取得するための最良の方法は何ですか?

私は当初、tbl_Shop でエントリを作成し、この新しく作成されたアイテムの ShopID を返し、tbl_Products で作成するときにそれを挿入することを考えていましたが、これは面倒/不正確/信頼できない方法のようです。

テーブル間の関係を設定していません (必要かどうかわかりません)。

ありがとう

編集:

最初に DB を作成し、それからモデルを生成しました。Model1.Designer.cs には次のものがあります。

public partial class MyDBEntities3 : ObjectContext
{
   ....

Service.svc には次のものがあります。

[System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class Service : DataService< MyDBEntities3>
{

    public static void InitializeService(DataServiceConfiguration config)
    {

        config.SetEntitySetAccessRule("*", EntitySetRights.All);
        config.SetEntitySetPageSize("*", 50);
        config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;

        config.SetServiceOperationAccessRule("*", ServiceOperationRights.AllRead); 
        //set to false in production
        config.UseVerboseErrors = true;
    }



    [WebGet]
    public IQueryable<GetRentByDate_Result> GetStoretByID(int ID)
    {
        // Calls a Stored Procedure which returns the store of a given StoreID
         return CurrentDataSource.GetRentByDate(ID).AsQueryable();
    }

}

4

2 に答える 2

0

JavaScript を使用して複数のテーブルに同時に挿入するには、深い挿入ペイロードを作成し、それをサービスに POST する必要があります。これは、data.jsのようなものを使用して OData サービスのクライアントとして機能させると、おそらく非常に簡単になります。

とはいえ、JavaScript でこれを行う方法のデモンストレーションとして試すことができるいくつかの手順を次に示します。

  1. Fiddler を使用して、http://services.odata.org/(S(readwrite))/OData/OData.svc/Productsに対して GET を実行します。
  2. その GET への応答からセッション キーをコピーし、それを今後のすべての URL で使用します。
  3. 次のペイロードを http://services.odata.org/(S([sessionkeythatyoucopied]))OData/OData.svc/Products に POST します (Content-Type ヘッダーと Accept ヘッダーを application/json に設定する必要もあります)。

    { "_ metadata":{ "type":"ODataDemo.Product" }, "ID":0, "Description":"Fun to play with", "DiscontinuedDate":null, "Name":"Silly Putty", "Price":"4.25", "Rating":5, "ReleaseDate":"/Date(1343765403829)/", "Category":{ " _metadata":{ "type":"ODataDemo.Category" }, "ID ":0, "名前":"おもちゃ" } }

  4. 201 Created レスポンスを調べる

  5. Products および Categories エンティティ セットから get を実行して、新しいエンティティを表示します。

于 2012-08-01T00:19:50.027 に答える
0

この場合、外部キー関係が適切に聞こえます。使用している SQL のフレーバーはわかりませんが、次のような方法でうまくいくはずです。

ALTER TABLE tbl_Products
ADD CONSTRAINT [MY_FK] FOREIGN KEY([ShopID]) REFERENCES [dbo].[tbl_Shop]([ShopID])

信頼性などの問題を防ぐための関係の要点。


編集: 新しいショップの ID を調べています...

IDENTITY最も簡単な方法は、次の行に沿った列を使用してショップ テーブルを作成することです。

CREATE TABLE tbl_Shop
(
    ShopID INT IDENTITY(1,1) PRIMARY KEY
    Location VARCHAR(100)
    Owner VARCHAR(100)

)

ここで、行を tbl_Shop に挿入するときは、次のようにする必要があります。

INSERT INTO tbl_Shop (Location, Owner) SELECT 'Mars', 'Martian'

そしてShopIDを把握するために

DECLARE @SHOP INT = SCOPE_IDENTITY (assuming SQLServer 2008)

次に、その変数を使用して Product テーブルに挿入できます。

于 2012-07-24T19:59:46.927 に答える