L-F*_*our 6 c# mapping entity-framework relational-database ef-code-first
在我的数据库中,我有一个表类别,列ID,CategoryName,ParentCategoryId,其中ParentCategoryId对Category.Id有约束.
我首先使用实体框架代码,实体看起来像:
public class Category
{
public long Id { get; private set; }
public string CategoryName { get; private set; }
public long? ParentCategoryId { get; private set; }
public Category ParentCategory { get; private set; }
public virtual ICollection<Category> SubCategories { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试对此运行查询,我会得到异常:
The relationship 'ComplaintModel.FK_Complaint_Category' was not loaded because the type 'ComplaintModel.Category' is not available.\r\nThe following information may be useful in resolving the previous error:\r\nThe required property 'Category1' does not exist on the type 'EC.Complaint.Services.Command.Domain.Entities.Category'.\r\n\r\n"} System.Exception {System.Data.MetadataException}
Run Code Online (Sandbox Code Playgroud)
所以它似乎需要导航属性,如果我添加这些:
public ICollection<Category> Category1 { get; private set; }
public long? Category2Id { get; private set; }
public Category Category2 { get; private set; }
Run Code Online (Sandbox Code Playgroud)
查询有效.
但是,当然,我不想要Category1和Category2属性,我想要使用ParentCategory和SubCategories属性.
如何告诉代码首先使用正确的导航属性?
你的POCO课应该是这样的......
public class Category
{
public long Id { get; private set; }
public string CategoryName { get; private set; }
public long? ParentCategoryId { get; private set; }
public virtual Category ParentCategory { get; private set; }
public virtual ICollection<Category> SubCategories { get; private set; }
}
public class CategoryConfiguration : EntityTypeConfiguration<Category>
{
public CategoryConfiguration()
{
this.HasKey(x => x.Id);
this.HasMany(category => category.SubCategories)
.WithOptional(category => category.ParentCategoryId)
.HasForeignKey(course => course.UserId)
.WillCascadeOnDelete(false);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5116 次 |
| 最近记录: |