将ComplexType与ToList一起使用会导致InvalidOperationException

时间:2012-09-16 21:36:14

标签: asp.net entity-framework complextype

我有这个模型

namespace ProjectTimer.Models
{
    public class TimerContext : DbContext
    {
        public TimerContext()
            : base("DefaultConnection")
        {
        }

        public DbSet<Project> Projects { get; set; }
        public DbSet<ProjectTimeSpan> TimeSpans { get; set; }
    }

    public class DomainBase
    {
        [Key]
        public int Id { get; set; }
    }

    public class Project : DomainBase
    {
        public UserProfile User { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public IList<ProjectTimeSpan> TimeSpans { get; set; }
    }

    [ComplexType]
    public class ProjectTimeSpan
    {
        public DateTime TimeStart { get; set; }
        public DateTime TimeEnd { get; set; }
        public bool Active { get; set; }
    }
}

当我尝试使用此操作时,我收到异常The type 'ProjectTimer.Models.ProjectTimeSpan' has already been configured as an entity type. It cannot be reconfigured as a complex type.

public ActionResult Index()
        {
            using (var db = new TimerContext())
            {
                return View(db.Projects.ToList);
            }
        }

视图使用模型@model IList<ProjectTimer.Models.Project>

任何人都可以阐明为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

EF不支持您的IList<ProjectTimeSpan>媒体资源。复杂类型必须始终是另一个实体类型的一部分,您不能单独使用复杂类型。如果您绝对需要将ProjectTimeSpan作为复杂类型,则需要创建仅包含密钥和ProjectTimeSpan的虚拟实体类型,并将Project.TimeSpans的类型更改为这种新类型的清单。