2017-09-15 106 views
0

配置关系,所以我有这些模型:在C#代码首先

ParentModel.cs

public class ParentModel { 
    ...properties here 

    //relationship to Child 
    [ForeignKey("ChildModelID")] 
    public ChildModel ChildModel { get; set; } 
} 

ChildModel.cs

public class ChildModel{ 
    ...properties here 

    //relationship to parent 
    [ForeignKey("ParentModel")] 
    public int? ParentModelID { get; set; } 
    public ParentModel ParentModel { get; set; } 
} 

我使用的Web API代码优先。我是新来的。我在创建数据库时遇到以下错误。但是,如果我删除ParentModel中的导航属性(即public ChildModel ChildModel { get; set; }),一切正常,但它不能满足我的需求。当我获得ParentModel时,我想要加载(或延迟加载不知道哪个项是正确的)ChildModel。这里的关系是零或一对一。意思是ChildModel可以有一个记录,在ParentModel中没有引用。

Multiplicity is not valid in Role 'ChildModel_ParentModel_Source' in relationship 
'ChildModel_ParentModel'. Because the Dependent Role properties are not the key 
properties, the upper bound of the multiplicity of the Dependent Role must 
be '*'. 

预先感谢您!

+0

怎么样删除[ForeignKey的( “ChildModelID”)]来自ParentModel? – yyou

+0

仍然是一样的,原来那个代码不在那里,但在线回答给我的建议,但仍然不起作用。 – Jed

+0

[EF6外键有一对一关系和双向属性导航]的可能重复(https://stackoverflow.com/questions/42515355/ef6-foreign-key-with-one-to-one-relationship -and-two-way-property-navigation) –

回答

0

我认为你混合了ForeignKey属性。不应该在ParentModel,并参考ParentModelID

public class ChildModel 
{ 
    ...properties here 

    //relationship to parent 
    public int? ParentModelID { get; set; } 
    [ForeignKey("ParentModelID")] 
    public ParentModel ParentModel { get; set; } 
} 
+0

是的,如果你看看上面的代码,你会注意到我在这两个模型上都有了ForeignKey。 – Jed

+0

不,你没有。再看看我的答案。该属性是在不同的属性 –

+0

是的,我也试过了,仍然是同样的错误。 – Jed

2

ChildModel和ParentModel是一对零/一

更新:

因此,让我们试试这个代码

public class ChildModel 
{ 
    public int Id { get; set; } 
    public ParentModel ParentModel { get; set; } 
} 

public class ParentModel 
{ 
    //[ForeignKey("ChildModel")] 
    //[Key] 
    public int ChildModelId { get; set; } 
    public ChildModel ChildModel { get; set; } 
} 

public class Context : DbContext 
{ 
    public DbSet<ChildModel> ChildModels { get; set; } 
    public DbSet<ParentModel> ParentModels { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<ParentModel>().HasKey(s => s.ChildModelId); 

     modelBuilder.Entity<ParentModel>().HasRequired(s => s.ChildModel).WithOptional(s => s.ParentModel); 
    } 
} 
+0

它仍然不起作用。现在的问题是我不能在没有ParentModelID的情况下在ChildModel中插入记录。即使当我把ff。代码: 'public int? ParentModelID {get;组; }' – Jed

+0

另外,如果我删除'[Key]'注释,它会给我我在原始问题上提到的错误。 – Jed

+0

@Jed你想插入一个没有ParentModelID的ChildModel?没有父母的孩子?这是否合理?问题:ChildModel和ParentModel是主体,哪个是依赖的? –