我有以下POCO在旧版EF6 API上运行(为简洁起见,已简化)。
public class Customer
{
[ForeignKey("Parent")]
public int? ParentId { get; set; }
public Customer Parent { get; set; }
public virtual List<Site> Sites { get; set; }
}
public class Site
{
public List<Department> Departments { get; set; }
[ForeignKey("Customer")]
public int? CustomerId { get; set; }
public Customer Customer { get; set; }
}
我在客户实体上具有以下流利的api配置;
HasOptional(x => x.Sites).WithOptionalDependent().WillCascadeOnDelete(true);
并且在站点实体上;
HasOptional(r => r.Customer).WithMany().HasForeignKey(r => r.CustomerId);
但是,当我从客户角度运行以下查询时(并希望包括网站)
context.Where<Customer>(x => x.ParentId == null,
x => x.Sites).ToList();
方法在哪里;
public List<T> Where<T>(Expression<Func<T, bool>> predicate, params Expression<Func<T, object>>[] includes) where T : class, IEntity
{
return this.AsQueryable(includes).Where(predicate).ToList();
}
我收到错误消息;
System.Data.Entity.Core.EntityCommandCompilationException:准备命令定义时发生错误。有关详细信息,请参见内部异常。 ---> System.Data.Entity.Core.MetadataException:导航属性CCS.Data.UCare.Customer.Sites的声明类型与指定导航的结果不兼容。
EF在数据库中生成的表如下;
任何人都可以建议我在这里出什么问题吗?
UPDATE
我还尝试了数据库的全新重建(删除了所有迁移,并以新的add-migration
和update-database
的形式运行到新的测试数据库)。但是问题仍然存在。
您尝试过:
HasOptional(r => r.Customer).WithMany(c => c.Sites).HasForeignKey(r => r.CustomerId);