我有以下课程:
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;
}
当我想使用breeze查询检索数据时:
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));
答案 0 :(得分:0)
我无法重现您的问题。
我可以使用或不使用'.Include(“Profiles.Contact”)'来获得结果。
所以你知道我是如何测试它的,我将你的实体添加到TODO样本中,播种数据库并查询。
请提供一个小解决方案(即启用NuGet包恢复和删除包文件夹)来显示问题,这样我们就可能出错了。将解决方案发送至Breeze-Support@ideablade.com。
修改强>
我能够重现这个问题。我正在和我们的高级工程师核实这是不是一个错误。
顺便说一下,在测试您的解决方案时,我注意到您的Person-Organization关联没有正确设置。 (甚至以为我在正确设置后仍然会收到错误)
请注意,Breeze关联需要外键。此外,由于您似乎正在尝试设置单向关联,因此应使用Fluent API:
modelBuilder.Entity<Person>()
.HasRequired(t => t.Employer)
.WithMany()
.WillCascadeOnDelete(false);