New Posts New Posts RSS Feed: Breeze without EF
  FAQ FAQ  Forum Search   Calendar   Register Register  Login Login

Breeze without EF

 Post Reply Post Reply
Author
pawel View Drop Down
Newbie
Newbie
Avatar

Joined: 21-Sep-2012
Posts: 12
Post Options Post Options   Quote pawel Quote  Post ReplyReply Direct Link To This Post Topic: Breeze without EF
    Posted: 10-Oct-2012 at 12:56am
Can Breeze be used with WebApi, but without Entity Framework? I have different ORM framework and would like to write custom DTO (POCO + DataAnnotations) for client/server communication. If this is already possible, please help me get started.
If this is currently impossible, are there plans to allow such scenarios?
Back to Top
jtraband View Drop Down
IdeaBlade
IdeaBlade
Avatar

Joined: 19-Sep-2012
Posts: 55
Post Options Post Options   Quote jtraband Quote  Post ReplyReply Direct Link To This Post Posted: 11-Oct-2012 at 11:17am
Absolutely, this is supported.  We simply haven't gotten around to documenting it or providing samples yet.   There are also still some rough edges here but we should have some basic information on this topic out within the next few weeks.

For now, the simplest way to get started with this right now is to simply return an IQueryable<Object> from your ApiController

public class MyController : ApiController {

    // We'll assume that you cannot provide this.
    // [AcceptVerbs("GET")]
    // public String Metadata() {
    //  return ContextProvider.Metadata();
    // }

  [AcceptVerbs("GET")]
    public IQueryable<Object> MyObjects() {
      var stuff =this.GetMyObjects().AsQueryable();
      return stuff;
    }
}

Notice that there is no ContextProvider in this case.  Querying for MyObject from the Breeze client then looks something like this:

  var query = EntityQuery.from("MyObjects")
            .where("City", "startsWith", "San")
            .take(5)
  var myEntityManager.executeQuery(query).then(...)

This assumes that the type of the instances returned by MyObjects contains a property "City".  The Breeze server side code will still translate your client side queries into valid linq queries against the IQueryable provided on the server. 

This query will return "plain" json objects withing the breeze promise method or callback.  If you want these objects to be converted to "first class" breeze entities during the query process, then you will need to provide metadata for each type returned.  This metadata is normally returned from the server but it can also be provided client side via the use of the EntityType, DataProperty and Navigation property ctors. (see the apidocs for more detail on this).

Hope this helps,




Back to Top
pawel View Drop Down
Newbie
Newbie
Avatar

Joined: 21-Sep-2012
Posts: 12
Post Options Post Options   Quote pawel Quote  Post ReplyReply Direct Link To This Post Posted: 15-Oct-2012 at 2:48am
I would like to provide Metadata()! Just post some specification of what breeze expects. Currently I extract "ConceptualModels" this from EDMX, but I would like to know what is used and what is ignored (the string is rather long).
Back to Top
jtraband View Drop Down
IdeaBlade
IdeaBlade
Avatar

Joined: 19-Sep-2012
Posts: 55
Post Options Post Options   Quote jtraband Quote  Post ReplyReply Direct Link To This Post Posted: 15-Oct-2012 at 9:49am
Actually, we do use most of what is in the EDMX conceptual model.  But if you want to specify the metadata yourself, you can do something like this:

var fooEntityType = new breeze.entityModel.EntityType(myMetadataStore);
var dp1 = new breeze.entityModel.DataProperty(...);  // take a look at the api docs for DataProperty
fooEntityType.appProperty(dp1);
var dp2 = new breeze.entityModel.NavigationProperty(...); // take a look at the api docs for NavigationProperty

Most of the metadata that you will need to define is contained in the DataProperties and NavigationProperties that make up each EntityType.

Back to Top
kaanse View Drop Down
Newbie
Newbie
Avatar

Joined: 28-Oct-2012
Location: Turkey
Posts: 10
Post Options Post Options   Quote kaanse Quote  Post ReplyReply Direct Link To This Post Posted: 31-Oct-2012 at 8:23am
when i return i querable object 
its searching metedata fist how can i fix this 
i just want to take all data from method (getUnits)

-----------
    var serviceName = '/DocIndex';
    var manager = new entityModel.EntityManager(serviceName);
-----------

should i use something differnt  instead of "DataProperty" 

thanx for help




Edited by kaanse - 31-Oct-2012 at 8:31am
Back to Top
jtraband View Drop Down
IdeaBlade
IdeaBlade
Avatar

Joined: 19-Sep-2012
Posts: 55
Post Options Post Options   Quote jtraband Quote  Post ReplyReply Direct Link To This Post Posted: 31-Oct-2012 at 10:33am
Currently, you  have to return "some" metadata, but it can be empty.  We will change this in a later release but for now, just expose an empty EF model.
Back to Top
kaanse View Drop Down
Newbie
Newbie
Avatar

Joined: 28-Oct-2012
Location: Turkey
Posts: 10
Post Options Post Options   Quote kaanse Quote  Post ReplyReply Direct Link To This Post Posted: 31-Oct-2012 at 11:55am
how can i return empty metadata when i tried to return null
i am getting same error
can you give a example about that 

thanx for help
Back to Top
pawel View Drop Down
Newbie
Newbie
Avatar

Joined: 21-Sep-2012
Posts: 12
Post Options Post Options   Quote pawel Quote  Post ReplyReply Direct Link To This Post Posted: 02-Nov-2012 at 12:49am
Try to return the following string:

{"conceptualModels":{"schema":{"xmlns":"http://schemas.microsoft.com/ado/2009/11/edm","xmlns:cg":"http://schemas.microsoft.com/ado/2006/04/codegeneration","xmlns:store":"http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator","namespace":"THE_NAMESPACE_OF_THE_DTO_CLASSES_HERE","alias":"Self","xmlns:annotation":"http://schemas.microsoft.com/ado/2009/02/edm/annotation","annotation:UseStrongSpatialTypes":"false","entityContainer":{"name":"Model1Container","annotation:LazyLoadingEnabled":"true"}}}}

The same as a string const (should be a single line):

const string emptyMeta = @"{\""conceptualModels\"":{\""schema\"":{\""xmlns\"":\""http://schemas.microsoft.com/ado/2009/11/edm\"",\""xmlns:cg\"":\""http://schemas.microsoft.com/ado/2006/04/codegeneration\"",\""xmlns:store\"":\""http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator\"",\""namespace\"":\""THE_NAMESPACE_OF_THE_DTO_CLASSES_HERE\"",\""alias\"":\""Self\"",\""xmlns:annotation\"":\""http://schemas.microsoft.com/ado/2009/02/edm/annotation\"",\""annotation:UseStrongSpatialTypes\"":\""false\"",\""entityContainer\"":{\""name\"":\""Model1Container\"",\""annotation:LazyLoadingEnabled\"":\""true\""}}}}";


Edited by pawel - 02-Nov-2012 at 12:57am
Back to Top
munissor View Drop Down
Newbie
Newbie


Joined: 08-Nov-2012
Location: Ireland
Posts: 1
Post Options Post Options   Quote munissor Quote  Post ReplyReply Direct Link To This Post Posted: 08-Nov-2012 at 4:41am
I'm in the same situation, I'm trying to use breeze in a project where a DbContext is not there.

The approach is was following was to try to create the metadata on the client side, attaching it to the metadataStore.

However, after  all the configuration the MetadataStore appears to be empty, and is still calling the Metadata endpoint.
This is the code I used for configuring an entity type.


var breeze = root.breeze;
var serviceName = 'http://.../api';
var metadataStore = new breeze.entityModel.MetadataStore();

// create a UserEntity
var userEntityType = new breeze.entityModel.EntityType({
    metadataStore: metadataStore,
    serviceName: serviceName,
    shortName: "User",
});
userEntityType.addProperty(new breeze.entityModel.DataProperty({ name: "Id", isPartOfKey:true }));
userEntityType.addProperty(new breeze.entityModel.DataProperty({ name: "Name" }));

breeze.core.config.setProperties({
    trackingImplementation: breeze.entityModel.entityTracking_ko,
    remoteAccessImplementation: breeze.entityModel.remoteAccess_webApi
});

// NOTE: at this point metadataStore.isEmpty() returns true
// but metadataStore.getEntityTypes() return the configured entity

// make the breeze manager available to the page as a property of the root object
root.ConfiguredEntityManager = new breeze.entityModel.EntityManager({
    serviceName: serviceName,
    metadataStore: metadataStore,
});




There is something that we are doing wrong?
Back to Top
 Post Reply Post Reply

Forum Jump Forum Permissions View Drop Down