【问题标题】:Entity Framework Type and Properties not mapping ( errors 11007 and 11009 )实体框架类型和属性未映射(错误 11007 和 11009)
【发布时间】:2017-10-19 15:33:43
【问题描述】:

我在实体框架 6、.net 4.7、Visual Studio 2017 中首先遇到模型问题...

我正在尝试在两个表之间使用外键向 0...1 添加多个,当我尝试验证模型时,我收到错误消息,指出表中的外键字段未映射。此外,我什至无法将新实体添加到模型中,因为我在验证时收到错误提示实体未映射。它做了什么让自己进入这种状态?我几乎没有用它来做任何事情。

我该怎么做才能让它在没有这些错误的情况下做事?我知道这是因为它没有映射事物,但它应该自动执行此操作。考虑到它是第 6 版,整个事情似乎很草率。

我应该先切换到数据库吗?

谢谢。

【问题讨论】:

    标签: c# .net entity-framework entity-framework-6 ef-model-first


    【解决方案1】:

    对于将关系设置为 0...1,您必须

    1)创建模型并在模型中添加相关实体

    public class MainModel
    {
        public MainModel()
        {
            ChildModels= new HashSet<ChildModel>();
        }
    
        public int Id { get; set; }
    
        public virtual ICollection<ChildModel> ChildModels{ get; set; }
    }
    
    public class ChildModel
    {
        public int Id { get; set; }
    
        public int? MainModelId { get; set; }
        public MainModel MainModel { get; set; }
    }
    

    2) 通过 FluentApi 在 Context 类中设置关系

    modelBuilder.Entity<MainModel>()
                .HasMany(mm => mm.ChildModels)
                .WithOptional(cm => cm.MainModel )
                .HasForeignKey(cm => cm.MainModelId );
    

    在其中一个步骤中,您可能会犯错误。

    数据库优先是旧方法,我不建议您使用它。

    【讨论】:

    • 好的,谢谢。我设法通过删除 EF 创建的所有实体然后重建来使其工作。这重新创建了实体和映射。该模型经过验证,然后我可以生成数据库。可能我会坚持模型优先。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 2015-01-22
    • 2011-08-28
    • 1970-01-01
    相关资源
    最近更新 更多