实体框架一对多产生例外

时间:2013-02-18 11:59:45

标签: c# entity-framework entity-framework-4

我有一个包含2个类的数据库,并且我有一对多的关系设置。这是一个商店(我正在运行我的代码的主要类,它在我的数据库中加入商店销售的产品类别列表。

所以表格是;

shops 
int          id        //shopId & primaryKey
varchar(50) shopName  
...                    //other details left out.

ShopProductTypes
int          id       //Category id
int          ShopId   //Foreign Key to shop table
varchar(50)  CategoryName  
...

这一切都很简单,并通过sql viewer等处理。

我已导入数据库模型,并取消选中Pluralize / Singularize框。

我的背景是;

 public ReportingContext(string connectionString) : base(connectionString)
        {

            Database.SetInitializer<ReportingContext>(null);

        }

      protected override void OnModelCreating(DbModelBuilder modelBuilder)
      {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
      }

        public DbSet<AutoComp_Reporting.DAL.Shop> Shops{get; set;}

        public DbSet<AutoComp_Reporting.DAL.ShopProductTypes> ShopCategories { get; set; }

    }

但是当我跑步时;

var foo = (from s in context.Shops
          where (s.Id == id).select s).toList();

我可以看到所有商店,但如果我试着查看QuickWatch中的类别,我会得到以下异常

  

{“执行命令定义时发生错误。请参阅   详细内部异常。“}

System.Data.EntityException {System.Data.EntityCommandExecutionException}

放松最终揭示;

    Message "Invalid column name 'Shops_Id'.\r\nInvalid column name 'Shops_Id'.\r\nInvalid column name 'Shops_Id'."

我可能做错了,因为我是实体框架的新手,但我无法修复此错误。 我的数据库连接字符串中有MultipleActiveResultSets=True

那么如何找出此错误的原因和/或修复它?我猜测实际的内部异常取决于框架解释属性的方式,因此可能是一个红色的鲱鱼..

1 个答案:

答案 0 :(得分:0)

更改表中的外键名称,并应用ForeignKey属性似乎有效。但是我确信这不是正确的解决方案,否则它意味着如果你有一个根据特定命名约定构建的数据库,框架只能开箱即用。

请记住这是一个遗留应用程序,如何一劳永逸地解决这个问题?