【发布时间】:2015-01-05 00:02:11
【问题描述】:
首先使用代码 (EF 6),我创建了 1 父 - 2 子关系。属性是父对象,属性地址是具有 1 或 0..1 关系的子对象。 PropertyImage 是另一个具有一对多关系的孩子。 PropertyImage 工作正常,但如果我尝试预先加载,PropertyAddress 会抛出错误。
实际错误 -
违反了多重性约束。 关系“MyAssetTracker.DataLayer.Models.PropertyAddress_Property”的角色“PropertyAddress_Property_Source”具有多重性 1 或 0..1。
// Test Function
GetProperty()
{
Property property;
using (var repo = new PropertyRepository())
{
property = repo.AllIncluding(a=>a.Images, a=>a.Address).FirstOrDefault(a => a.Id == testpropertyid);
}
}
//Property Repository
public class PropertyRepository : IPropertyRepository
{
public IQueryable<Property> AllIncluding(params Expression<Func<Property, object>>[] includeProperties)
{
IQueryable<Property> query = context.Properties;
foreach (var includeProperty in includeProperties) {
query = query.Include(includeProperty);
}
return query;
}
}
//Property Entity
public class Property : DomainModelAuditBase, IDomainModelState
{
private Address _address;
private ICollection<Asset> _assets;
private ICollection<PropertyImage> _images;
public Property()
{
_address = new Address();
_assets = new List<Asset>();
_images = new List<PropertyImage>();
}
public Guid Id { get; set; }
[StringLength(100), Required]
public string Title { get; set; }
public bool IsPrimary { get; set; }
[StringLength(255)]
public string Description { get; set; }
[NotMapped]
public State State { get; set; }
public Guid AddressId { get; set; }
public Guid UserId { get; set; }
public virtual Address Address
{
get { return _address; }
set { _address = value; }
}
public virtual ICollection<Asset> Assets
{
get { return _assets; }
set { _assets = value; }
}
public virtual User User { get; set; }
public virtual ICollection<PropertyImage> Images
{
get { return _images; }
set { _images = value; }
}
}
//PropertyAddress
public class Address : DomainModelAuditBase, IDomainModelState
{
[Key,ForeignKey("Property")]
public Guid PropertyId { get; set; }
[StringLength(255),Required]
public string AddressLine1 { get; set; }
[StringLength(255)]
public string AddressLine2 { get; set; }
[StringLength(255)]
public string City { get; set; }
[StringLength(255)]
public string StateProvince { get; set; }
[StringLength(100)]
public string PostalCode { get; set; }
[StringLength(100)]
public string Country { get; set; }
[NotMapped]
public State State { get; set; }
public virtual Property Property { get; set; }
}
【问题讨论】:
-
哪一行抛出异常?
-
这一行抛出错误 -- property = repo.AllIncluding(a=>a.Images, a=>a.Address).FirstOrDefault(a => a.Id == testpropertyid);跨度>
-
您可以发布您的
Property和Address实体吗? -
添加了上面的实体
-
不确定这是否有帮助,但请尝试将
[ForeignKey("AddressId")]属性添加到Address属性。您可能还希望在User上使用它。看起来您已经拥有该属性来装饰Address中的属性。
标签: entity-framework ef-code-first