gpt4 book ai didi

javascript - 带有 ODataConventionModelBuilder 的 Breeze js AutoGeneratedKeyType 始终为 'none'

转载 作者:行者123 更新时间:2023-11-29 14:51:17 28 4
gpt4 key购买 nike

我有一个简单的entityframework poco对象

public partial class Location: Entity
{
[Key]
public int Id { get; set; }
public string Description { get; set; }
}

baseClass 实体如下所示

public abstract class Entity : IObjectState
{
[NotMapped]
public ObjectState ObjectState { get; set; }
}

我使用 ODataConventionModelBuilder 通过 Odata 服务公开此对象

        var server = GlobalConfiguration.DefaultServer;
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.Namespace = "MyNameSpace.Models";
builder.EntitySet<Location>(typeof(Location).Name);
var model = builder.GetEdmModel();
config.Routes.MapODataServiceRoute("odata", "odata", model, new DefaultODataBatchHandler(server));


config.AddODataQueryFilter();

当我使用 Breeze js 使用此服务时,当我尝试使用 manager.CreateEntity() 创建实体时,我从 breeze 中收到错误消息。

Cannot attach an object to an EntityManager without first setting its key or setting its entityType 'AutoGeneratedKeyType' property to something other than 'None'

当我查询实体并编辑数据并保存时。一切正常。

我在客户端上结合使用 angular 和 breeze,在服务器上结合使用 Asp.net webapi 2 和 odatacontroller,并使用 EntityFramework 6 作为 ORM。

谁能告诉我我做错了什么!!!

最佳答案

Microsoft 的 ODataConventionModelBuilder 非常不完整,他们知道这一点(这适用于 OData WebApi v 2.1 和 v 2.2)。除了一些较小的问题,它不支持“referentialConstraints”或存储生成的 key 的任何信息。 MS 已经意识到这些问题,并表示其中一些问题将在 10 月的某个时候在新版本中得到修复。

在那之前你有几个选择。

  • 使用 ODataConventionBuilder,但在获取元数据后更新 breeze 的 metadataStore 以“修复”丢失或错误的元数据。

    myMetadataStore.metadataFetched.subscribe(function(args) {
    var ms = args.metadataStore;
    var entityType = ms.getEntityType("Customer");
    entityType.setProperties({ autoGeneratedKeyType: AutoGeneratedKeyType.Identity });
    dp = entityType.getDataProperty("companyName");
    dp.validators.push(Validator.maxLength({ maxLength: 40 }));
    // etc...
    });
  • 完全避免从服务器获取元数据,直接在 breeze 客户端上描述元数据:(参见:http://www.breezejs.com/documentation/metadata-by-hand)

  • 完全跳过 OData 并使用 Breeze WebApi 实现(参见 http://www.breezejs.com/documentation/aspnet-web-api )。这具有成为所有 breeze 功能的最完整和最健壮的实现的优势。 breeze.js.samples 中的大部分 Entity Framework 示例都是以此构建的。

一般来说,如果您可以选择最后一种选择,我们真的会推荐它。请阅读此 ( http://www.breezejs.com/documentation/odata-server) 了解更多信息。

关于javascript - 带有 ODataConventionModelBuilder 的 Breeze js AutoGeneratedKeyType 始终为 'none',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25425029/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com