Breeze-保存对象图形时出现错误 我在这个场景中有一个错误: 使用NHibernate、GuidComb生成器和来自breeze的最新拉力(2ECA9BDB90B7C74C42D45202707221F93371BC1) 场景:创建一个包含其他实体集合的实体。试着一次就把一切都保存起来。 结果:该错误在id管理中。Breeze处理实体并构建保存顺序。将保存父实体(`NHContext.cs`第201行)。现在,父级的id已从Breeze生成的临时guid更改为数据库中使用的实际guid。然后,当Breeze试图保存子项时,我得到了一个外键约束错误,因为子项中的外键包含临时id而不是真实id。我几乎可以肯定它与Breeze 1.4.6一起工作。在NHibernate代码中进行了大量重写。 我没有尝试其他身份策略,只尝试GuidComb。 **编辑**:我对实体框架6和 `DatabaseGenerateOption.Identity`。这与EF的问题不同。我会问另一个问题。 **编辑**:临时guid相同。只有在执行保存时,父guid才会更改,而不是子guid。

Breeze-保存对象图形时出现错误 我在这个场景中有一个错误: 使用NHibernate、GuidComb生成器和来自breeze的最新拉力(2ECA9BDB90B7C74C42D45202707221F93371BC1) 场景:创建一个包含其他实体集合的实体。试着一次就把一切都保存起来。 结果:该错误在id管理中。Breeze处理实体并构建保存顺序。将保存父实体(`NHContext.cs`第201行)。现在,父级的id已从Breeze生成的临时guid更改为数据库中使用的实际guid。然后,当Breeze试图保存子项时,我得到了一个外键约束错误,因为子项中的外键包含临时id而不是真实id。我几乎可以肯定它与Breeze 1.4.6一起工作。在NHibernate代码中进行了大量重写。 我没有尝试其他身份策略,只尝试GuidComb。 **编辑**:我对实体框架6和 `DatabaseGenerateOption.Identity`。这与EF的问题不同。我会问另一个问题。 **编辑**:临时guid相同。只有在执行保存时,父guid才会更改,而不是子guid。,breeze,Breeze,下面是正确的场景: 实体文档继承自材质。一种材料有一组材料资源语言,这是一种多对多的语言 public class BaseEntity : IDeletable { public virtual Guid Id { get; set; } public virtual int Version { get; set; } public virtual bool IsDeleted { get; set; } public virtual DateTime C

下面是正确的场景:
实体文档继承自材质。一种材料有一组材料资源语言,这是一种多对多的语言

public class BaseEntity : IDeletable
{
    public virtual Guid Id { get; set; }

    public virtual int Version { get; set; }

    public virtual bool IsDeleted { get; set; }

    public virtual DateTime CreationDate { get; set; }

    public virtual DateTime? UpdateDate { get; set; }
}

public class Material : BaseEntity
{
    public virtual IList<MaterialSourceLanguage> SourceLanguages { get; set; }

    public Material()
    {
        this.SourceLanguages = new List<MaterialSourceLanguage>();
    }

}

public class Document : Material
{
    public virtual string FileName { get; set; }
}

public class MaterialSourceLanguage : BaseEntity
{
    public virtual Guid? MaterialId { get; set; }

    public virtual Material Material { get; set; }

    public virtual Guid? LanguageId { get; set; }

    public virtual Language Language { get; set; }

    public MaterialSourceLanguage()
    {
    }
}

@还有一件事。Breeze是一个免费的开源项目。没有“供应商”。好的。我搞定了。首先,保存对象的图形非常有效。我测试了几个场景,它一直都在工作。这里的问题是我们有继承权。我将更新初始问题以添加更多细节。谢谢@lnu。我看到问题了,我会帮你解决。@lnu,我查过了。与您的稍有不同,以说明(例如)文档和图片扩展材质以及文档和图片都显示在SaveMap中的情况。请尝试一下,让我知道它是否适合你。谢谢你找到另一个。啊!你说得对,我忘了更新WebApi 1代码。现在修好了。
private EntityInfo FindInSaveMap(Type entityType, object entityId)
    {
        var entityIdString = entityId.ToString();
        var entityInfoList = saveMap.Where(p => entityType.IsAssignableFrom(p.Key)).Select(p => p.Value).FirstOrDefault();
        if (entityInfoList != null)
        {
            var meta = session.SessionFactory.GetClassMetadata(entityType);
            foreach (var entityInfo in entityInfoList)
            {
                var entity = entityInfo.Entity;
                var id = meta.GetIdentifier(entity, EntityMode.Poco);
                if (id != null && entityIdString.Equals(id.ToString()))
                    return entityInfo;
            }
        }
        return null;
    }