Inheritance “分层类错误”;不能设置集合导航属性。”;

Inheritance “分层类错误”;不能设置集合导航属性。”;,inheritance,breeze,Inheritance,Breeze,为了支持继承,我安装了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;

为了支持继承,我安装了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; }
}
服务器中的DbContext:

public DbSet<AClass> Projects { get; set; }
public DbSet<BClass> OtherProjects { get; set; }
错误在
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
时,breeze工作得很好,但是当我使用
AClass
BClass
继承时会出现错误

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


请帮助我解决此错误,欢迎提供任何建议。

我们无法纠正您的错误,因此请您将显示错误的“小”测试用例发送到breeze.ideablade.com(电子邮件中的收件人:Jay Traband)。Breeze zips中最新的DocCode示例有一个“inheritation.sdf”数据库和一个与您的非常相似的InheritanceController类,如果您需要一个开始的地方的话

你什么时候收到这个错误?当您正在查询或尝试在客户端上添加实体时?再详细一点就好了。谢谢你的时间和兴趣。我查询时出错。您的查询是针对“项目”的吗?你是说当“Projects”返回“HClass”时它工作,但当它返回“AClass”时它失败了吗?和。。您能同时显示服务器端控制器方法吗?是的,当我使用HClass时它工作,但当我在dbContext和controller中使用AClass时它失败。我编辑了问题并从服务器添加了一些信息。我们正在调查。感谢您的关注,我向发送了一封电子邮件breeze@ideablade.com主题:“Attn:Jay Traband:Please help me with:Breeze hierarchy class error.”我回顾了最新的DocCode,唯一的区别是服务器端控制器方法,例如我的方法“Projects”返回“AClass”集合,但每个项目都设置了“Parent”和“Children”(因为我需要它)。
[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;
    }
return entityQuery.from('Projects')
            .using(manager).execute()
            .then(success)
            .fail(queryFailed);
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);
        }
    }
}