私は、プロジェクトを形成するために拡張されたホットタオルテンプレートに付属の Breeze v1.1.2 を使用していました。NuGet パッケージを最新の 1.3.3 に更新するというミスを犯しました (学習したことはありません)。とにかく、すべてが順調で、今はそれほどでもありません!
リリース ノートやその他のドキュメントの指示に従って、BreezeWebApiConfig ファイルを次のように変更しました。
[assembly: WebActivator.PreApplicationStartMethod(
typeof(BreezeWebApiConfig), "RegisterBreezePreStart")]
namespace MyApp.App_Start {
public static class BreezeWebApiConfig {
public static void RegisterBreezePreStart() {
GlobalConfiguration.Configuration.Routes.MapHttpRoute(
name: "BreezeApi",
routeTemplate: "breeze/{controller}/{action}"
);}}}
そして、config.js ファイル (EntityManager コンストラクターに serviceName を提供する) を次のようにします。
var remoteServiceName = 'breeze/breeze'; // NEW version
//var remoteServiceName = 'api/breeze'; // OLD version
興味があれば、私の BreezeController:
[BreezeController]
public class BreezeController : ApiController
{
readonly EFContextProvider<MyDbContext> _contextProvider =
new EFContextProvider<MyDbContext>();
[HttpGet]
public string Metadata()
{
return _contextProvider.Metadata();
}
[HttpGet]
public IQueryable<SomeItem> SomeItems()
{
// Do stuff here...
}
}
「metadataStore が設定されるまで _executeQueryCore を実行できません」というエラーが表示されるようになりました。
ここで何が欠けていますか?
編集: 必要な部分を省略した可能性があります... 上記の SomeItems() メソッドで、実際に行われるのは MyDBContext クラスの GetMeSomeData() メソッドの呼び出しです。このメソッドは、ストアド プロシージャに対して次の呼び出しを行い、データを取得します。
public virtual ObjectResult<SomeItem> GetMeSomeData(string inParam)
{
var p = new object[] { new SqlParameter("@inParam", inParam) };
var retVal = ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery<SomeItem>("exec GetData @SN", p);
return retVal;
}
私の限られた理解では、 Metadata() への呼び出しは失敗していませんが、戻ってきたときにエンティティモデルが何であるかはわかりませんが、どこかでエンティティからそれを理解する必要があります私が持っているモデル (つまり、SomeItem)? Metadata() からの戻り文字列には、エンティティに関する情報が含まれていません。意識させる方法はありますか?それとも、ヒナギクで遊んでいるレフトフィールドで完全にオフになっていますか?