Entity framework 从具有相同类型的联接表加载导航属性

Entity framework 从具有相同类型的联接表加载导航属性,entity-framework,breeze,Entity Framework,Breeze,我有以下课程: public abstract class Contact { public int Id { get; set; } public ICollection<Address> Addresses { get; set; } public ICollection<ContactProfile> Profiles { get; set; } public ICollection<ContactProfile> Co

我有以下课程:

public abstract class Contact
{
    public int Id { get; set; }

    public ICollection<Address> Addresses { get; set; }
    public ICollection<ContactProfile> Profiles { get; set; }
    public ICollection<ContactProfile> ContactProfiles { get; set; }
}

[Table("Persons")]
public class Person : Contact
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public Organization Employer { get; set; }
}

[Table("Organizations")]
public class Organization : Contact
{
    public string Name { get; set; }
}

public class ContactProfile
{
    public int Id { get; set; }
    public int ContactId { get; set; }
    public int ProfileId { get; set; }

    public virtual Contact Contact { get; set; }
    public virtual Contact Profile { get; set; }
}
将从BreezeJS引发对象预期异常:

TypeError: Object expected
   at Anonymous function (../breeze.debug.js:13283:36)
但仅当我想从连接表(ContactProfile)加载包含“Profiles.Contact”等内容的导航属性时

服务器端的一切都很好,数据库也成功生成

我错过什么了吗

编辑:

我已经更新了我的数据模型。只有在设置了雇主和ContactProfile关系时,才会出现例外情况:

var people = new List<Person>
    {
        new Person
        {
            FirstName = "Jan Dae",
            LastName="Dae",
            Addresses = new List<Address>{addresses[0]},
            Employer = organizations[0] // Exception when both are set
        }
    };
people.ForEach(p => context.Contacts.Add(p));

var references = new List<ContactProfile>
    {
        new ContactProfile
            {
                Contact = people[0],
                Profile = organizations[0] //Exception when both are set
            }
    };
references.ForEach(r => context.ContactProfiles.Add(r));
var people=新列表
{
新人
{
FirstName=“Jan Dae”,
LastName=“Dae”,
地址=新列表{地址[0]},
雇主=组织[0]//两个都设置时出现异常
}
};
people.ForEach(p=>context.Contacts.Add(p));
var references=新列表
{
新联系人档案
{
联系人=人[0],
Profile=organizations[0]//设置了这两个组织时出现异常
}
};
references.ForEach(r=>context.ContactProfiles.Add(r));

我无法重现您的问题

我可以使用或不使用“.Include”(“Profiles.Contact”)获得结果

所以您知道我是如何测试它的,我将您的实体添加到TODO示例中,为db添加种子,并进行查询

请提供一个小的解决方案(即启用NuGet Package Restore和delete packages folder)来显示问题,以便我们了解可能出现的问题。将解决方案发送给Breeze-Support@ideablade.com.

编辑:

我能够重现这个问题。我正在与我们的高级工程师核实这是否确实是一个bug

顺便说一下,在测试您的解决方案时,我注意到您的个人组织关联设置不正确。(即使我正确设置后仍然会出现错误)

请注意,微风关联需要外键。此外,由于您似乎正在尝试建立单向关联,因此应使用Fluent API:

  modelBuilder.Entity<Person>()
    .HasRequired(t => t.Employer)
    .WithMany()     
    .WillCascadeOnDelete(false);
modelBuilder.Entity()
.需要(t=>t.雇主)
.有很多
.WillCascadeOnDelete(假);

我已经更新了我的问题,并发送了一个小样本@breeze支持邮件。谢谢。我得到了示例并将进行查看。我正在查看您的示例,但它甚至没有在数据库中植入种子,因为我在context.SaveChanges()调用中遇到了“Default values not supported”错误。因为这不是您报告的错误,所以我将由您来处理此问题,并向我发送复制原始问题的样本。我对您的示例所做的唯一更改是取消web.config中connectionString项的注释。很抱歉,出现了这个错误。SQL CE 4.0不支持单字段表,因此我在联系人模型中添加了属性“Name”。我已通过breeze支持邮件重新发送了我的样本。
TypeError: Object expected
   at Anonymous function (../breeze.debug.js:13283:36)
var people = new List<Person>
    {
        new Person
        {
            FirstName = "Jan Dae",
            LastName="Dae",
            Addresses = new List<Address>{addresses[0]},
            Employer = organizations[0] // Exception when both are set
        }
    };
people.ForEach(p => context.Contacts.Add(p));

var references = new List<ContactProfile>
    {
        new ContactProfile
            {
                Contact = people[0],
                Profile = organizations[0] //Exception when both are set
            }
    };
references.ForEach(r => context.ContactProfiles.Add(r));
  modelBuilder.Entity<Person>()
    .HasRequired(t => t.Employer)
    .WithMany()     
    .WillCascadeOnDelete(false);