【问题标题】:Initilialize Navigation Property when creating new Entity with Breeze使用 Breeze 创建新实体时初始化导航属性
【发布时间】:2014-06-21 20:39:04
【问题描述】:

我有一个简单的模型定义为

public class Project
{
    public int Id { get; set; }

    public string Title { get; set; }

    public string Description { get; set; }

    public int StatusId { get; set; }

    public virtual Status Status { get; set; }
}

public class Status
{
    public int Id { get; set; }
    public string Name { get; set; }
}

所以,目前如果我尝试使用微风创建一个新的项目实体,它会使用null 初始化导航属性“状态”。如何使用默认值初始化它?请注意,至少对于创建操作,我不希望与该字段的下拉字段进行任何绑定。

function createNewProject() {
     return manager.createEntity('Project');
}

【问题讨论】:

    标签: breeze navigation-properties


    【解决方案1】:

    您可以为Project 实体类型定义自定义构造函数,并在其中设置默认的StatusId 值。 Status 导航属性将设置为相关的状态实体(假设该实体在微风缓存中)。例如:

    function Project() {
        this.StatusId = desiredDefaultStatusEntityId;
    }
    
    var manager = new breeze.EntityManager('...');
    manager.metadataStore.registerEntityTypeCtor('Project', Project);
    

    查看Extending entities,了解有关扩展实体的更多信息。

    【讨论】:

    • 我已经尝试过了,但它会引发错误:“无法在实体 ctor 中分​​配导航属性”。我认为我们不能像这样设置导航属性。任何建议
    • 啊,我明白了。尝试设置 StatusID 怎么样,希望通过 ID 轻松查找 Status 对象:this.StatusID = desiredDefaultStatusID
    • 是的,这行得通。但你认为,这是一个好方法吗?如果我用下拉菜单设置它,它工作正常。如果我想使用默认选项初始化它,为什么我必须使用 StatusId 进行设置?
    • 是的,我认为这是一个很好的方法。最终,Status 导航属性的值是从StatusId ID 属性派生的,因此设置 ID 属性非常好。我会更新答案来描述这一点。
    • 好的。但是我没有在构造函数中设置属性。这不起作用,我在创建一个新实体后设置了 statusId,比如 vm.StatusId=1;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多