2010-09-01 91 views
0

我有两个对象...,如果我用任何一个编译程序,它可以正常工作,但是当它们都存在于同一个程序中时,我会得到异常。实体已经参与另一种关系,实体框架CodeOnly

“ObjectContext.UnitSet”中的实体参与“Sheet_Statistics”关系,找到0个相关的'Sheet',1'Sheet'is expected。

class Unit 
{ 
public int Id; 
public string Name; 
} 
class Template 
{ 
public int Id; 
public virtual ICollection<Unit> Units 
} 

class Sheet 
{ 
public int Id; 
public virtual ICollection<Unit> Units 
} 

然后它们的配置..

TemplateConfiguration:EntityConfiguration // ....

 //// map the collection entity 
     HasMany(k => k.Units).WithRequired() 
      .Map("template.units", 
       (template, unit) => new 
       { 
        Template = template.Id, 
        Unit = unit.Id 
       }); 

SheetConfiguration:EntityConfiguration // ....

 //// map the collection entity 
     HasMany(k => k.Units).WithRequired() 
      .Map("sheet.units", 
       (sheet, unit) => new 
       { 
        Sheet = sheet.Id, 
        Unit = unit.Id 
       }); 

UnitConfiguration : EntityConfiguration<Unit> 
// 
      // Initialize the Primary Key 
      HasKey(k => k.Id); 
      // Initialize that the Key Increments as an Identity 
      Property(k => k.Id).IsIdentity(); 


var templates = new List<Template> 
       { 
        new Template 
        { 
         Name = // .., 
         Units = new List<Unit> 
         { 
          new Unit 
          { 
           // ... 
          } 
         } 
        } 
       }; 
       templates.ForEach(x => 
       { 
        context.Templates.Add(x); 
       }); 
       context.SaveChanges(); // <-- Exception Happens Here, I never even get to try to add Sheets. 
+1

哪里是实际抛出异常的代码? – 2010-09-01 21:37:11

+0

当我尝试将模板添加到数据库并在Context上调用“SaveChanges()”时。 – Ciel 2010-09-01 22:25:46

+0

我与克雷格在这一个,你需要提供更多的代码。这是诚实的所有映射代码? – TheCloudlessSky 2010-09-01 22:27:22

回答

2

我在刺探这个,因为没有看到全部你的代码,我不能解决更多的问题。我认为你的问题是你创建Unit s但不设置某种Sheet属性(你需要提供所有的实体/配置代码)。您需要创建SheetUnit这两个然后才可以保存UnitSheet因为他们有一个必需的参考(因此,您收到的错误)。如果你提供更多的代码,我将能够更好地改进我的答案。

+0

你的理论听起来不错,我已经更新了代码。从字面上看,除了更多的关闭/开放括号和特定的字符串外,没有其他任何内容可以添加与此代码有关的任何内容。 – Ciel 2010-09-01 23:18:50

+0

@Stacey - 我认为您需要确保您的数据库模式与您要映射的内容相匹配。沿线的某处不匹配。例如,什么是'Sheet_Statistics'? – TheCloudlessSky 2010-09-01 23:23:29

+0

没有什么叫Sheet_Statistics!那就是问题所在。我甚至没有制作床单。不过,我将尝试将WithRequired()更改为WithOptional(),并查看是否可以得到不同的结果。 – Ciel 2010-09-01 23:26:16