我在EF Core 2.0中有一个实体类:
public class Component : BaseModel
{
[Required]
public string Name { get; set}
public virtual ICollection<ComponentInstance> ComponentInstances { get; set; }
public virtual Title Title {get ; set;}
}
和另一个ComplexType
类:
[ComplexType]
public class Title
{
public string Text { get; set; }
public string Color { get; set; }
public string BackgroundColor { get; set; }
}
运行此代码:
var component = _dbContext.Company
.Where(x => x.Id == componentId)
.Include(x => x.Title)
.FirstOrDefault();
抛出异常:
该物业&#39; Title&#39;不是实体类型的组件&#39;的导航属性。 &#39;包含(字符串)&#39;方法只能用于&#39;。&#39;分隔的导航属性名称列表。
答案 0 :(得分:0)
如果您仍在努力,则需要向您的班级[ForeignKey("")]
加注。
像这样:
public class Component : BaseModel
{
[Required]
public string Name { get; set}
public virtual ICollection<ComponentInstance> ComponentInstances { get; set; }
[ForeignKey("Title")]
public Title Title {get ; set;}
}
答案 1 :(得分:0)
最可能的问题是,在Component
班级中,Title
属性未标记为virtual
。
如果不是virtual
实体框架不能override
它,那么它将忽略它,并且不会将它视为具有上下文的实体。
现在,即使您将其标记为虚拟,它仍然不一定意味着实体框架会将其识别为实体,因此在这种情况下,您需要指定与Entity Framework's Fluent API的关系
如果组件类的关系对于实体框架是明确的,基于Convention over Configuration,则没有必要明确说明与流畅API的关系。
您显然还需要在您的类中拥有继承自DbSet<Component>
类
DbSet<Title>
和DbContext
属性