0

我有以下课程:

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; }
}

使用以下流畅的 API 映射:

    modelBuilder.Entity<Contact>()
                .HasMany(c => c.Profiles)
                .WithRequired(c => c.Contact)
                .WillCascadeOnDelete(false);

    modelBuilder.Entity<Contact>()
                .HasMany(c => c.ContactProfiles)
                .WithRequired(c => c.Profile)
                .WillCascadeOnDelete(false);

我的 BreezeApi 方法:

public IQueryable<Contact> Contacts()
{
    var contacts = _contextProvider.Context.Contacts
        .Include("Profiles")
        //.Include("Profiles.Contact") // Object expected on client side
        .Include("Addresses")

    return contacts;
}

当我想用微风查询检索数据时:

var query = entityQuery.from("Contacts");

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));
4

1 回答 1

0

我无法重现您的问题。

我可以得到有或没有'.Include("Profiles.Contact")'的结果。

所以你知道我是如何测试它的,我将你的实体添加到 TODO 样本中,为 db 植入种子并进行查询。

请提供一个显示问题的小解决方案(即启用 NuGet 包还原和删除包文件夹),以便我们了解可能出现的问题。将解决方案发送至 Breeze-Support@ideablade.com。

编辑:

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

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

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

  modelBuilder.Entity<Person>()
    .HasRequired(t => t.Employer)
    .WithMany()     
    .WillCascadeOnDelete(false);
于 2013-08-20T22:40:28.370 回答