我在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();
抛出异常:
属性"标题"不是实体类型"组件"的导航属性。" include(string)"方法只能与a"一起使用。分开的导航属性名称列表。
如果您仍在挣扎,则需要在课堂上添加[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;}
}
最可能的问题是在您的Component
类中,Title
属性未标记为virtual
。
如果它不是virtual
实体框架无法override
,然后将忽略它,并且不会将其视为具有上下文的实体。
现在,即使您将其标记为虚拟,它仍然不一定意味着实体框架将其识别为实体,因此在这种情况下,您需要指定与实体框架的流利API
的关系如果基于配置的惯例,组件类的关系与实体框架之间的关系清楚,则无需明确说明与流利的API的关系。
您显然还需要在类上从DbContext
class
DbSet<Component>
和 DbSet<Title>
属性