2009-05-27 13 views
0

アストリアと亜音速のプレビュー2を説明、インターネット上のリソースのカップルがあります。亜音速3つのアルファ+ ado.netデータサービスの任意のサンプル

http://code.msdn.microsoft.com/SubSonicForADONETDS

http://theruntime.com/blogs/jaykimble/archive/2008/11/18/quotsubsonicquot-for-services-found-subsonic-3--ado.net-data-services.aspx

と作業サンプルは、

私はすべての変更を亜音速tt(s)に適用しましたが、MSDNプロジェクトの作業はできませんでした。 除去した後:

a)のアストリアは プライベートDBを(好きではなかった){} QuerySurface.ttで、私は盲目的コンストラクタ公共

B製)を生成する方法がわからない化合物

主キー

[System.Data.Services.Common.DataServiceKey("")] 

代わりに

<# if(EnableForUseWIthAstoria) { 
#> [System.Data.Services.Common.DataServiceKey("<#=pk#>")] <# }#> 

結果

このようにテーブルを除外しました。

現在の障害物の例外で

 var q = from cust in ctx.Customers 
       where cust.CustomerID == "ROMEY" 
       select cust; 

     Customers c = q.First(); 

結果: リソースセグメントが見つかりません「お客様」

は、誰もがそれを試してみましたか、別の最新かつ最高のサンプルの存在を知っていますか?

答えて

0

はい、IUpdatableインターフェイスでss3のバージョンをチェックインし、UpdatableDatabaseクラスからDBクエリサーフェスクラスを継承しました。私はそれのためのスターターテストプロジェクトも含めました。いいところは、UriでDBクラスを構築し、サービスに対して作業を開始できることです。しかし、それは現在のコアの一部ではなく、新しいクラスといくつかの並べ替えと小さなテンプレートの変更が必要です。私はこれが人々がこのことを再考し続け、前の仕事に頼っていないその領域の一つだと思います。私がプロジェクトに取り入ろうと思っていた変更点はいくつかありますが、実行時に複数のデータベースを設定したり、AD.netサービスなどを作成したりしないようにしました。私は自分のバージョンを永続的にブランチする必要があります。

This issueには、UpdatableDatabaseクラスを示す添付ファイルがあります。

私はSubSonicClasses.ttincludeにこれを追加しました:

public string PrimaryKey 
{ 
    get { return Utilities.CleanUp(this.Schema.GetTablePrimaryKey(TableSchema, TableNameRaw)); } 
} 

... 

[System.Data.Services.Common.DataServiceKey("<#=PrimaryKey #>")] 

を私はノースウィンドでたOrderDetailsと騙してファイルを直接編集することで、第2の鍵を追加参照してください。あなたは簡単にDatabaseSchema.ttincludeに、このような方法を記述することができます。

public string[] GetTablePrimaryKeys(string tableSchema, string tableName) 

と正しい文字列を構築します。

+0

がダウンロード可能なスターターテストプロジェクトですか? http://code.google.com/p/subsonicthree/source/browse/を参照しましたか、ブランチが表示されません。 – MicMit

+0

これはソース管理から完全に一掃されたようです。私は今日後で私のバージョンへのリンクを提供することができます。テンプレートの変更などがあります。 –

0

ソニックライセンスが含まれているので、私は解を解き放つことができますか分かりません。亜音速ではなく、約2ヶ月(旧式)です。私はちょうどそれがまだ動作していたことをテストするためにプロジェクトを実行しました。これを行う手順は次のとおりです。

上記のUpdatableDatabaseクラスを使用します。次に、(テンプレートでこれを入れて)それからDBを導き出す:

公共部分クラスのDB:それはGETTYPEする必要があるのでUpdateableDatabase

UpdatableDatabase.csは、生成されたクラスであること、または、それは動作しません持っています()をテーブルクラスに追加します。

サービスは、このクラスで単にサービスのプロジェクトです:

using System.Data.Services; 
using Northwind; 

namespace NorthwindService 
{ 
    [System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults=true)] 
    public class Northwind: DataService<DB> 
    { 
     // This method is called only once to initialize service-wide policies. 
     public static void InitializeService(IDataServiceConfiguration config) 
     { 
      config.SetEntitySetAccessRule("*", EntitySetRights.All); 
      config.UseVerboseErrors = true; 
     } 
    } 
} 

のweb.configのサービスの一部は簡単です:

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
    </system.serviceModel> 

そして、テストプロジェクトのためにサービス参照を追加しますサービス。私はそれはしばらくしている、私は思うアストリアプロジェクトからテストコードを取っ:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 
using WcfClientTest.NorthwindService; 

namespace WcfClientTest 
{ 
    /// <summary> 
    /// Summary description for WcfTest 
    /// To run these tests, load this project, and somehow get a server running at the URI. 
    /// This can be done by updating the service reference to start the development server. 
    /// </summary> 
    [TestClass] 
    public class WcfTest 
    { 
     private string baseURI = "http://127.0.0.1:49649/Northwind.svc"; 
     private DB ctx; 

     /// <summary> 
     /// Sets up test. 
     /// </summary> 
     [TestInitialize] 
     public void SetUp() 
     { 
      ctx = new DB(new Uri(baseURI)); 
     } 

     [TestCleanup] 
     public void Cleanup() 
     { 
     } 

     [TestMethod] 
     public void Select_Simple_With_Variable() 
     { 
      int categoryID = 5; 
      IQueryable<Product> result = from p in ctx.Products 
             where p.CategoryID == categoryID 
             select p; 

      List<Product> products = result.ToList(); 
      Assert.AreEqual(7, products.Count()); 
     } 

     [TestMethod] 
     public void TestAddNew() 
     { 
      // add customer 
      var c = new Customer 
         { 
          CustomerID = "XXXXX", 
          ContactTitle = "Prez", 
          Country = "USA", 
          ContactName = "Big Guy", 
          CompanyName = "Big Guy Company" 
         }; 
      ctx.AddToCustomers(c); 
      ctx.SaveChanges(); 

      IQueryable<Customer> qCustomer = from cust in ctx.Customers 
              where cust.CustomerID == "XXXXX" 
              select cust; 

      Customer c2 = qCustomer.FirstOrDefault(); 

      Assert.AreEqual("XXXXX", c2.CustomerID); 

      if (c2 != null) 
      { 
       ctx.DeleteObject(c2); 
      } 
      ctx.SaveChanges(); 

      IQueryable<Customer> qCustomer2 = from cust in ctx.Customers 
               where cust.ContactName == "Big Guy" 
               select cust; 
      // Returns null if the row isn't found. 
      Customer c3 = qCustomer2.SingleOrDefault(); 
      Assert.AreEqual(null, c3); 
     } 
    } 
} 

私が持っているすべてです、一緒に置くことは難しいことではありません。今は問題解決のための解決策ですが、いつか使うつもりです。完全に亜音速をバイパスし、IQToolkitを直接使用することも可能で、いくつかのT4テンプレートはかなり良いシステムを持っています。

+0

ありがとうございました。問題はSVNからの最新のチェックアウトが簡単にコンパイルされないので、私はalpha zip dllを使用します。あなたのサンプルが新しいメソッドを使用したように見えますが、私は元に戻す必要がありました。 ITable tbl = db.FindTable(typeof(T).Name); // ITable tbl = db.FindTableByClassName(typeof(T).Name); など...すべてコンパイルしましたが、データサービスと同じエラーが発生しました。 'Customers'というセグメントのリソースが見つかりませんでした。 おそらく、私はslnとしてラップされたインターネットに別の完全なサンプルが現れるのを待っています。 – MicMit

+0

それはコンパイルされますが、私はそれを数分間しなければなりませんでした。 'FindTableByClassName'は 'FindTable'にリファクタリングされました。私はあなたがデバッガを使用してそのエラーを追跡することができると思います。なぜサンプルプロジェクトが好きなのか、私は確信しています。私はそれを圧縮することができますが、それを配信する方法はわかりません... –

0

ここにIUpdatableインターフェイスのパッチがあり、必要なテンプレートが変更されています。私は99%が最終的なプロジェクトには参加しないだろうと確信していますが、少なくともあなたはどのようにそれをやったか見ることができます。

http://code.google.com/p/subsonicthree/issues/detail?id=52

+0

MSDNのUpdateableDatabase.csのオリジナルサンプルを使用しています。 public abstract class UpdateableDatabase:IUpdatable、IQuerySurface オリジナルでは: パブリック部分クラスDB:IUpdatable は必須または設計上の選択でした。 – MicMit

+0

元のファイルはSubSonicIUpdateable.csでした。私は約3ヶ月前にこの仕事をしました。なぜ私がそれをしたのか覚えていませんが、いずれにしてもうまくいくと思います。私は、今日のコードを見直して、テストがまだ合格していることを確認しました。最新のhead subsonic3リビジョンを実行しているサンプルがあります。 –