गठबंधन करने की कोशिश की है, मैं उन तकनीकों को गठबंधन करने की कोशिश कर रहा हूं, लेकिन कुछ भी अच्छा नहीं आता है, क्योंकि इकाई फ्रेमवर्क मेटा-डेटा नहीं करता है wind.js से भस्म हो जाओ, यहां तक कि सभी विन्यास जहां सेटअप, यह थोड़ा मुश्किल स्थिति है, सचमुच इसका कोई उदाहरण नहीं है, इसलिए यह मेरा नमूना कोड है जो ठीक से काम नहीं करता है, लेकिन किसी भी तरह से किसी को मेरी गलती मिल जाएगी और अंत में इस पहेली को हल करने में मदद करें या इसे शुरुआती बिंदु के रूप में मिलेगा।क्या कोई AngularJS + ASP.NET-WebApi + OData + Breeze.js + टाइपस्क्रिप्ट उदाहरण हैं या किसी ने उन
OdataService.ts
'use strict';
module twine.components {
class MetadataStoreOptions implements breeze.MetadataStoreOptions{
namingConvention:breeze.NamingConvention = breeze.NamingConvention.defaultInstance;
}
class Manager implements breeze.EntityManagerOptions {
metadataStore: breeze.MetadataStore;
constructor(public dataService: breeze.DataService) {
}
}
class DataServiceOptions implements breeze.DataServiceOptions {
serviceName = 'http://twine.azurewebsites.net/odata';
hasServerMetadata = true;
}
export class ODataService {
options: Manager;
manager: breeze.EntityManager;
metadataStore: breeze.MetadataStore;
storeOptions: MetadataStoreOptions;
static $inject: string[] = ['$http', '$rootScope'];
cache: twine.Model.IEntity[];
constructor(private $http: ng.IHttpService, private $rootScope: ng.IRootScopeService){
this.storeOptions = new MetadataStoreOptions();
this.metadataStore = new breeze.MetadataStore(this.storeOptions);
this.options = new Manager(new breeze.DataService(new DataServiceOptions()));
this.options.metadataStore = this.metadataStore;
this.manager = new breeze.EntityManager(this.options);
breeze.config.initializeAdapterInstance('dataService', 'webApiOData', true);
//this.manager.fetchMetadata((meta) => {
// this.metadataStore.importMetadata(meta);
//});
}
All(query:breeze.EntityQuery, successCallback: Function, failCallback?: Function): void {
this.manager.executeQuery(query)
.then((data: breeze.QueryResult) => {
successCallback(data);
this.$rootScope.$apply();
})
.catch((reason: any) => {
if (failCallback) {
failCallback(reason);
}
});
}
Get(key:number, successCallback: Function, failCallback?: Function): void {
//this.manager.fetchMetadata();
//var entityType = this.manager.metadataStore.getEntityType('Tag');
//var entityKey = new breeze.EntityKey(entityType, key);
this.manager.fetchEntityByKey('Tag', key)
.then((data: breeze.EntityByKeyResult) => {
successCallback(data);
this.$rootScope.$apply();
})
.catch((reason: any) => {
if (failCallback) {
failCallback(reason);
}
});
}
}
}
और यह tagController.ts
है'use strict';
module twine.routes {
interface ITagsScope extends ng.IScope {
vm: TagsCtrl;
}
interface ITagsCtrl extends twine.components.ITwineRoute{
tags:any[];
getTags:() => void;
tag: any[];
getTag: (id:number) => void;
}
export class TagsCtrl implements ITagsCtrl{
/* @ngInject */
static controllerId: string = 'TagsController';
static controllerAsId: string = 'tagsCtrl';
static $inject: string[] = ["$scope", "ODataService", '$route'];
entityQueryName: string = 'Tag';
query: breeze.EntityQuery;
tags:any;
tag: any;
constructor (private $scope: ITagsScope, private ODataService: twine.components.ODataService, $route: ng.route.IRouteService) {
this.query = new breeze.EntityQuery(this.entityQueryName);
if($route.current && $route.current.params.id){
this.getTag($route.current.params.id);
}
else {
this.getTags();
}
}
getTags() {
this.ODataService.All(this.query , (data) => {
this.tags = data.results[0].value;
}, (error) => {
console.log('error', error);
});
}
getTag(id:number){
this.ODataService.Get(id , (data) => {
this.tag = data.results[0].value;
}, (error) => {
console.log('error', error);
});
}
}
}
कई त्रुटियों, अलग विन्यास पर हैं, कभी कभी यह There is no resourceName for this query
या EntityKey must be set
, या Other stupid errors
है जो वास्तव में नहीं हैं करता है दिखाना है क्योंकि यह एक टाइपस्क्रिप्ट है जो प्रकार के विसंगतियों की अनुमति नहीं देता है, लेकिन कॉन्फ़िगरेशन स्वयं सही नहीं है।
और यह सार नियंत्रक
[EnableCors(origins: "*", headers: "*", methods: "*")]
public abstract class EntityController<T> : ODataController where T: Entity
{
protected ODataRepository<T> repo = new ODataRepository<T>();
private static ODataValidationSettings _validationSettings = new ODataValidationSettings();
public EntityController()
{
}
// GET: odata/Entity
[EnableQuery]
public IQueryable<T> Get(ODataQueryOptions<T> queryOptions)
{
try
{
queryOptions.Validate(_validationSettings);
}
catch (ODataException ex)
{
Trace.WriteLine(ex.Message);
return null;
}
return repo.All();
}
// GET: odata/Entity(5)
[EnableQuery]
public SingleResult<T> Get([FromODataUri] long key, ODataQueryOptions<T> queryOptions)
{
try
{
queryOptions.Validate(_validationSettings);
}
catch (ODataException ex)
{
Trace.WriteLine(ex.Message);
return null;
}
return SingleResult.Create(repo.All().Where(x=>x._id == key));
}
//ommitted
}
है और अंत में इस ASP.NET WebAPI विन्यास
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Конфигурация и службы веб-API
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
// Маршруты веб-API
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
//CORS
var cors = new EnableCorsAttribute(
"*",
"*",
"*",
"DataServiceVersion, MaxDataServiceVersion"
);
config.EnableCors(cors);
// Маршруты Odata
//config.EnableQuerySupport();
config.AddODataQueryFilter();
Builder<Account>(config);
Builder<Branch>(config);
Builder<Bucket>(config);
Builder<Ingredient>(config);
Builder<Like>(config);
Builder<Meetup>(config);
Builder<Shot>(config);
Builder<Skill>(config);
Builder<Tag>(config);
Builder<Team>(config);
}
private static void Builder<T>(HttpConfiguration config) where T: class
{
var entityType = Activator.CreateInstance<T>().GetType();
if (entityType != null)
{
var builder = new ODataConventionModelBuilder();
builder.EntitySet<T>(entityType.Name);
config.Routes.MapODataServiceRoute("odata_" + entityType.Name, "odata", builder.GetEdmModel());
}
}
}
है परीक्षण प्रयोजन के लिए मैं http://twine.azurewebsites.net/odata/Tag
पर इस काम कर समर्थन किया OData सेवा, (वर्तमान में से कोई प्रतिबंध नहीं है सीओआरएस, नि: शुल्क महसूस करें) अंतिम इकाई को वेब एपीआई कॉन्फ़िगरेशन Build
विधि के आधार पर अन्य नाम में बदला जा सकता है। किसी भी अन्य जानकारी पूछने के लिए स्वतंत्र महसूस करें। किसी को पूरे स्रोत की जरूरत है, GitHub
अद्यतन
Mension को भूल जाओ पर प्रकाशित करने के लिए तैयार im, समस्या ODataService की विधि Get
में है। मैं सर्वर से हवा में मेटाडेटा को बाध्य नहीं कर सकता, विधि सभी ठीक काम करता है। लेकिन fetchByEntityKey
वहाँ कोड का एक बहुत कुछ है, और यह देखने के लिए कि क्या वास्तविक सवाल यह है कि मुश्किल है। – Claies
कॉन्फ़िगरेशन भाग 'OdataService.ts', हवा को कॉन्फ़िगर कैसे करें? दस्तावेज़ीकरण के अनुसार, मेरा सेटअप सही है –
क्या आप कृपया गीथब को कोड अपलोड कर सकते हैं?मेटाडाटा सही ढंग से प्रेषित नहीं होने के साथ सर्वर की दूसरी समस्या है, लेकिन उत्तर देने में सक्षम होने के लिए दोनों नियंत्रकों और डेटाकॉन्टेक्स्ट को देखने की आवश्यकता है। – cfs