Enums 在模型上使用枚举属性时,client breeze.js中出现异常

Enums 在模型上使用枚举属性时,client breeze.js中出现异常,enums,breeze,Enums,Breeze,关于breeze.js中的enum支持,我唯一能找到的就是uservoice,它最近在0.82中被标记为关闭。 我正在使用当前最新的0.84.3 更新: 我首先在EF5.0.0和.NET4.5中使用代码。当启动应用程序并breeze请求元数据时,EF创建空数据库,我的enum属性在数据库中作为int,所以该部分是ok的 然而,当我向模型中添加枚举属性时,当breeze试图解析元数据时,我遇到了异常: Uncaught Error: Unable to locate an 'Type' by th

关于breeze.js中的enum支持,我唯一能找到的就是uservoice,它最近在0.82中被标记为关闭。 我正在使用当前最新的0.84.3

更新: 我首先在EF5.0.0和.NET4.5中使用代码。当启动应用程序并breeze请求元数据时,EF创建空数据库,我的enum属性在数据库中作为int,所以该部分是ok的

然而,当我向模型中添加枚举属性时,当breeze试图解析元数据时,我遇到了异常:

Uncaught Error: Unable to locate an 'Type' by the name: ItemType:#TestApp.Models breeze.debug.js:5051
getTypeFromMap breeze.debug.js:5051
ctor.getEntityType breeze.debug.js:5028
ctor._updateProperty breeze.debug.js:6056
ctor._fixup breeze.debug.js:6133
ctor._fixup breeze.debug.js:6132
ctor.addEntityType breeze.debug.js:4702
convertFromODataEntityType
这是我的模型(简化):


我哪里出错了?enum是否有可用的示例?

我刚刚尝试将您的ItemType enum添加到我们的一个模型(breeze DocCode示例中的ToDo模型)中,没有出现问题

我不知道你遇到了什么。所以有两个建议,

1) 尝试更新(破解)breeze samples zip中附带的DocCode示例,以使用您的ItemType enum(详细信息如下),然后运行任何基本的ToDo测试

// In DocCode/Models/ToDoItem.cs
namespace Todo.Models 
{
    public class TodoItem 
    {
        public int Id { get; set; }                     // 42

        [Required, StringLength(maximumLength: 30)]     // Validation rules
        public string Description { get; set; }         // "Get milk"

        public System.DateTime CreatedAt { get; set; }  // 25 August 2012, 9am PST
        public bool IsDone { get; set; }                // false
        public bool IsArchived { get; set; }            // false
        // YOUR ENUM PROPERTY
        public ItemType Type { get; set; }
    }

    // YOUR ENUM TYPE
    public enum ItemType {
      Ordered,
      Approved,
      Misc
    }

}

// In DocCode/Models/ToDoDatabaseInitializer
private static TodoItem CreateTodo(string description, bool isDone, bool isArchived)
{
    _baseCreatedAtDate = _baseCreatedAtDate.AddMinutes(1);
    return new TodoItem
    {
        CreatedAt = _baseCreatedAtDate,
        Description = description,
        IsDone = isDone,
        IsArchived = isArchived,
        // YOUR ENUM PROPERTY
        Type = ItemType.Ordered
    };
}


2) 发送给我(杰伊·特拉班德)你的项目的精简版本breeze@ideablade.com.

您使用的是什么版本的Entity Framework(和.NET),模型代码还是数据库?此信息有助于我们尝试重新编辑您的问题。我编辑了我的问题以包含该信息。谢谢,我通过尝试在样本上复制发现了问题。基本上,当我将enum添加到示例中时,我注意到它不是通过元数据发送的,并且在分析元数据时出现异常。所以,我清除了cache:)我遇到的问题是Type属性作为复杂属性在元数据中发送,我不知道它应该是什么样子。当我看到不应该存在时,我想我已经缓存了版本中的元数据,其中类型是每个类型层次结构表的EF鉴别器,我用enum将其更改为单一类型,因为我在更深层次的继承和breeze方面遇到了问题。很抱歉,浪费了您的时间!没问题!这样的反馈有助于我们改进文档。不定期清理缓存会让我头疼。啊,我错了,那不是元数据缓存。当我刷新它时,枚举类型丢失了,因为我在类中声明了它,因为它表示该类实例的类型,所以我想封装它。然而,这导致EF忽略了这个属性,所以我认为这个问题已经解决了,但后来我注意到并没有属性。在调试TODO示例的工作方式后,我确定VS没有正确更新breeze js文件,我的项目中的文件和示例中的文件之间存在差异。我复制了它们,现在就可以了!
// In DocCode/Models/ToDoItem.cs
namespace Todo.Models 
{
    public class TodoItem 
    {
        public int Id { get; set; }                     // 42

        [Required, StringLength(maximumLength: 30)]     // Validation rules
        public string Description { get; set; }         // "Get milk"

        public System.DateTime CreatedAt { get; set; }  // 25 August 2012, 9am PST
        public bool IsDone { get; set; }                // false
        public bool IsArchived { get; set; }            // false
        // YOUR ENUM PROPERTY
        public ItemType Type { get; set; }
    }

    // YOUR ENUM TYPE
    public enum ItemType {
      Ordered,
      Approved,
      Misc
    }

}

// In DocCode/Models/ToDoDatabaseInitializer
private static TodoItem CreateTodo(string description, bool isDone, bool isArchived)
{
    _baseCreatedAtDate = _baseCreatedAtDate.AddMinutes(1);
    return new TodoItem
    {
        CreatedAt = _baseCreatedAtDate,
        Description = description,
        IsDone = isDone,
        IsArchived = isArchived,
        // YOUR ENUM PROPERTY
        Type = ItemType.Ordered
    };
}