1

データを保存するときに次のエラーが発生します。Get は正常に動作します。私はVS2012を使用しています.MVC4 Webapiプロジェクトを作成しNugetBreeze.js. サーバーでは、Code First の DbContext を使用しています。

サーバー側コード

 [BreezeController]
    public class CountryController : ApiController
    {
        private CountryContext db = new CountryContext();


            readonly EFContextProvider<CountryContext> _contextProvider =
        new EFContextProvider<CountryContext>();

        // ~/api/todos/Metadata 
        [HttpGet]
        public string Metadata()
        {
            return _contextProvider.Metadata();
        }

        // GET api/Country
        public IQueryable<Country> GetCountries()
        {
            return db.Countries.AsQueryable();
        }

        // ~/api/todos/SaveChanges
        [AcceptVerbs("POST")]
        public SaveResult SaveChanges(JObject saveBundle)
        {
            return _contextProvider.SaveChanges(saveBundle);
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }
    }
}

DbContext

public class CountryContext : DbContext
    {

        public CountryContext() : base("name=CountryContext")
        {
        }

        public DbSet<Country> Countries { get; set; }
    }

ヘッダ

{
   "entities":[
      {
         "Country_ID":1,
         "Country_Code":"USA modified",
         "Country_Name":"Unites states hjk",
         "entityAspect":{
            "entityTypeName":"Country:#LearnKnockout.Models",
            "entityState":"Modified",
            "originalValuesMap":{
               "Country_Name":"Unites states"
            },
            "autoGeneratedKey":{
               "propertyName":"Country_ID",
               "autoGeneratedKeyType":"Identity"
            }
         }
      }
   ],
   "saveOptions":{
      "allowConcurrentSaves":false
   }
}

応答

{
   "$id":"1",
   "$type":"System.Web.Http.HttpError, System.Web.Http",
   "Message":"An error has occurred.",
   "ExceptionMessage":"Method not found: 'System.Data.Objects.ObjectContext System.Data.Entity.Infrastructure.IObjectContextAdapter.get_ObjectContext()'.",
   "ExceptionType":"System.MissingMethodException",
   "StackTrace":" at Breeze.WebApi.EFContextProvider 1.get_ObjectContext()\r\n at Breeze.WebApi.EFContextProvider 1.ProcessSaves(Dictionary2 saveMap)\r\n at Breeze.WebApi.EFContextProvider 1.SaveChangesCore(Dictionary2 saveMap)\r\n at Breeze.WebApi.ContextProvider.SaveChanges(JObject saveBundle)\r\n at LearnKnockout.Controllers.CountryController.SaveChanges(JObject saveBundle) in c:\\Users\\nssidhu\\Documents\\Visual Studio 2012\\Projects\\CountryWebAPI\\CountryWebAPI\\Controllers\\CountryController.cs:line 43\r\n at lambda_method(Closure , Object , Object[] )\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass13.b__c(Object instance, Object[] methodParameters)\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.<>c__DisplayClass5.b__4()\r\n at System.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func 1 func, CancellationToken cancellationToken)"
}
4

5 に答える 5

2

2013 年 10 月 28 日更新:

現在、Breeze 1.4.5 は Microsoft の ASP.NET WebApi 2 および Entity Framework 6 をサポートしています。 http://www.breezejs.com/documentation/downloadを参照してください。

古い投稿...

Breeze は Entity Framework バージョン 6アルファ版でまだテストされておらず、少なくともベータ版に達するまでテストする可能性は低いでしょう。

とはいえ、JsonFormatter および ODataActionFilter 属性は、BreezeController 属性とともに、最新バージョンの Breeze にまだ存在しています。

于 2012-12-27T18:22:20.820 に答える
2

あなたがどのようにしてこの混乱に陥ったかについて推測があります。

まず、Visual Studio 内の視覚的な [NuGet パッケージの管理] ダイアログを使用していると思います。

次に、左上のコンボボックスで [プレリリースを含める]を選択したと思います。これがあなたの経験を再現できる唯一の方法です。コンボボックスの設定を確認して、こちらにコメントを返していただけませんか?

その場合、NuGet は、EF がまだプロジェクトにない場合は EF v.6 アルファをインストールし、ある場合は EF 5 を EF 6 にアップグレードします。痛い! これは、既存のプロジェクトの EF パッケージを個別にアップグレードした場合にも発生する可能性があります。

プレリリースパッケージが絶対に欲しいという確信がない限り、「安定版のみ」の設定に固執することを強くお勧めします。コンボボックスの設定が「スティッキー」になっているので、忘れずに「安定のみ」に戻してください。

はい、NuGet パッケージで EF バージョンの上限を制限することができます...おそらくそうするでしょう。率直に言って、それはNuGetのガイダンスに反しており、すべてのバージョニング順列を管理することは非常に困難であり、標準パスから逸脱した場合は責任を負うことが重要です。

BreezeControllerAttributeを欠いているBreeze.WebApi.dllの古いバージョンをどのように取得したかは不明です。Breeze.MVC4WebApiClientSample NuGet パッケージをインストールする以外に、どのようにして[BreezeController]属性を知りましたか? これは、その属性を見つけることができる唯一の NuGet パッケージです...そして、そのパッケージをインストール (またはアップグレード) すると、正しい Breeze.WebApi.dll 参照がコンパニオン "packages" フォルダーに配信されるはずです。

あなたのプロジェクトファイルは少し壊れていると思います。あなたは NuGet 地獄にいます。NuGet を本当によく知っていない限り、多くの場合、カスタム コードをコピーしてプロジェクトをゼロから再構築する方がよいでしょう。

于 2012-12-29T00:29:55.640 に答える
1

EF 6.0 で名前空間が変更されたため、見つからないメソッドの例外がスローされます。具体的には次のとおりです。

System.Data.Objects.ObjectContext => System.Data.Entity.Core.Objects.ObjectContext System.Data.EntityState => System.Data.Entity.EntityState

詳細: http://entityframework.codeplex.com/wikipage?title=Updating%20Applications%20to%20use%20EF6

ソースを取得し、EFContextProvider.cs を変更してそれらの名前空間を使用することができます。

于 2012-12-27T19:54:37.490 に答える
0

ckalが説明しているように、 EFContextProvider.csを更新し、Entity Framework 6 で新しい名前空間を使用する必要があります。

更新されたコードの要旨を次に示します。Breeze.WebApi プロジェクトを機能させるには、Entity Framework 6 に更新する必要があります。

私は自分のプロジェクトでそれをテストしましたが、以前と同じように動作するようです。

于 2013-07-16T13:46:08.450 に答える
0

最新のNuget Packagae(ほとんどがエンティティFramewroKのアルファ版)に問題があるようです。

現在の BreezeNuget パッケージをアンインストールしてから、以前のバージョンをインストールしましたが、すべて正常に動作しています (以前のバージョンを使用すると、属性を Breezecontroller ではなく Jsonformater、oDataActionfilter に変更する必要がありました)。

インストール パッケージ Breeze.MVC4WebApi -バージョン 0.78.1

于 2012-12-26T01:55:04.670 に答える