2013-02-18 51 views
2

我有一个数据库有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 
... 

这是所有straighforwards,并通过SQL观众等请客工作

我已经导入了数据库模型,unbchecked的复数化/ 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(); 

我可以看到所有的商店,但如果我尝试看看在快速监视的类别,我得到的follwoing例外

{“,而执行命令定义时发生错误。见 内部异常的详细信息“}

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

那么,我该如何追查这个错误的原因和/或解决它?我猜测,实际的内部例外是框架解释属性的方式,所以可能是一个红色的鲱鱼..

+0

您的错误消息指出“Shops_Id”,而在您的表格定义中显示为“ShopId”。 – 2013-02-18 12:03:51

+0

我知道,我认为这是一个诚实的框架的人工制品,因为我在我的代码中使用的模型是从数据库生成的。或者你是否在说每次我导入/更新模型时,都需要编辑自动生成的代码,以便该ID与框架所期望的一致?如果它试图迫使我重新设计一个现有的数据库以适应它的期望,它似乎是一个相当差的框架! – Matt 2013-02-18 12:08:10

+0

你可以发布ShopProductTypes的代码吗? – Smaug 2013-02-18 12:43:23

回答

0

更改表中的外键的名称,并应用ForeignKey属性似乎已经工作。不过,我相信这不是正确的解决方案,否则这意味着如果您有一个已经构建到特定命名约定的数据库,则该框架只能在框中使用。

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