我在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();抛出异常:
属性“Title”不是实体类型“Component”的导航属性。'Include(string)‘方法只能与'.’一起使用。导航属性名称的分隔列表。
发布于 2017-12-21 07:37:23
如果你还在挣扎,你需要在你的课堂上做一个[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;}
}发布于 2017-12-21 07:43:14
最可能的问题是,在Component类中,Title属性没有标记为virtual。
如果它不是virtual实体框架,则不能override它,然后就会忽略它,并且不会将它视为一个具有上下文的实体。
现在,即使您将其标记为虚拟的,它也不一定意味着实体框架将识别它为一个实体,因此在这种情况下,需要指定与实体框架的Fluent API的关系。
如果组件类的关系对于实体框架来说是明确的,那么基于约定高于配置的组件类关系就没有必要用fluent API来显式地描述这种关系。
显然,您还需要在继承自DbSet<Component>类的类上具有DbContext和DbSet<Title>属性。
https://stackoverflow.com/questions/47919861
复制相似问题