【问题标题】:Breeze hierarchical class error "Collection navigation properties may NOT be set."Breeze 分层类错误“可能未设置集合导航属性。”
【发布时间】:2013-05-19 01:38:39
【问题描述】:

我已经安装了最新版本的 Breeze 1.3.2 以支持继承。 我有一个具有双向关联的层次类:

public abstract class HClass
{        
    public HClass()
    {
        Children = new List<HClass>();
    }
    [Key]
    public int Id { get; set; }
    public Nullable<int> ParentId { get; set; }
    public string Name { get; set; }

    public virtual ICollection<HClass> Children { get; set; }
    public virtual HClass Parent { get; set; }
}

我还有其他具有继承的类:

public class AClass : HClass
{
    public string Observation { get; set; }
}

public class BClass : HClass
{
    public int Number { get; set; }
}

服务器中的 DbContext:

public DbSet<AClass> Projects { get; set; }
public DbSet<BClass> OtherProjects { get; set; }

服务器端控制器方法:

[HttpGet]
    public ICollection<AClass> Projects()
    {
        ICollection<AClass> projects = new List<AClass>();
        AClass pro1 = new AClass(); AClass pro2 = new AClass(); AClass pro3 = new AClass(); AClass pro4 = new AClass();
        pro1.Id = 1;
        pro1.Name = "Project 1";
        pro1.Observation = "Main";
        pro2.Id = 2;
        pro2.Name = "Project 2";
        pro2.Observation = "Main";
        pro3.Id = 3;
        pro3.Name = "Sub Project 3";
        pro3.ParentId = 1;
        pro3.Parent = pro1;
        pro4.Id = 4;
        pro4.Name = "Sub Project 4";
        pro4.ParentId = 1;
        pro4.Parent = pro1;
        pro1.Children.Add(pro3);
        pro1.Children.Add(pro4);
        projects.Add(pro1);
        projects.Add(pro2);
        return projects;
    }

“projects”中的每个item都设置了“Parent”和“Children”item,方法Projects返回层次结构。

但我有下一个错误Collection navigation properties may NOT be set.。当我查询时:

return entityQuery.from('Projects')
            .using(manager).execute()
            .then(success)
            .fail(queryFailed);

错误在breeze.debug.js:

function updateRelatedEntity(relatedEntity, targetEntity, navigationProperty) {
    if (!relatedEntity) return;
    var propName = navigationProperty.name;
    var currentRelatedEntity = targetEntity.getProperty(propName);
    // check if the related entity is already hooked up
    if (currentRelatedEntity !== relatedEntity) {
        // if not hook up both directions.
        targetEntity.setProperty(propName, relatedEntity); //Error here
        var inverseProperty = navigationProperty.inverse;
        if (!inverseProperty) return;
        if (inverseProperty.isScalar) {
            relatedEntity.setProperty(inverseProperty.name, targetEntity);
        } else {
            var collection = relatedEntity.getProperty(inverseProperty.name);
            collection.push(targetEntity);
        }
    }
}

当我使用HClass 时,微风工作完美,但当我使用AClassBClass 与继承时出现错误。

我已更新到 Breeze 1.3.3 但错误仍然存​​在

请帮我解决这个错误,欢迎提出任何建议。

【问题讨论】:

  • 什么时候出现这个错误?当您查询或尝试在客户端上添加实体时?更多细节会很棒。
  • 感谢您的时间和兴趣。查询时出现错误。
  • 您的查询是针对“项目”的?您是说当“Projects”返回“HClass”时它可以工作,但是当它返回“AClass”时它会失败?和..你能展示一下服务器端控制器的方法吗?
  • 是的,当我使用 HClass 时它可以工作,但是当我在 dbContext 和 Controller 中使用 AClass 时它会失败。我编辑了问题并从服务器添加了一些信息。
  • 我们正在调查。

标签: inheritance breeze


【解决方案1】:

我们无法重现您的错误,所以您能否通过电子邮件将显示错误的“小”测试用例发送到微风.ideablade.com(在电子邮件中的某处注明收件人:Jay Traband)。 Breeze zips 中最新的 DocCode 示例有一个“Inheritance.sdf”数据库和一个与您的非常相似的 InheritanceController 类,如果您需要一个起点的话。

【讨论】:

  • 感谢您的关注,我发送了一封电子邮件至微风@ideablade.com,主题为:“收件人:Jay Traband:请帮助我解决:Breeze 分层类错误。”
  • 我查看了最新的 DocCode,唯一的区别在于服务器端控制器方法,例如我的方法“Projects”返回“AClass”的集合,但每个项目项都设置了“Parent”和“孩子们”(因为我需要那个)。
猜你喜欢
  • 1970-01-01
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-25
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
相关资源
最近更新 更多