实体框架 - 包括复杂类型



我在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>属性

最新更新