2014-03-12 116 views
0

我有以下的遗留代码片段我不能改变遗留代码:代码首先一对一或零关系

public class EntityA 
{ 
    int SeqId { get; set; } //Not part of the key 

    [Association("EntityB", "Seq_ID", "Seq_ID")] 
    public EntityB EntityB { get; set; } 
} 

public class EntityB 
{ 
    [Key] 
    int SeqId { get; set; } 
} 

数据库是通过SQL创建并且不与实体框架。没有外键 键和关系处理为一对一/零。

现在,我们必须首先使用模型代码,并且实体框架添加外键关系。 由于我无法更改模型,但我可以覆盖OnModelCreating事件,我想要 重写关系从必需到可选。我试图添加

modelBuilder.Entity<EntityA>().Property(i => i.EntityB).IsOptional(); 

modelBuilder.Entity<EntityA>().HasOptional(i => i.EntityB).WithOptionalDependent() 

但在这两种情况下,实体框架抱怨。

+0

什么是例外?数据库中的“Seq_ID”是否可以空? – haim770

+0

我得到的例外: _多重性与角色'EntityA_EntityB_Target'中关系'EntityA_EntityB'中的参照约束冲突。 因为从属角色中的所有属性都是不可空的,所以主体角色的多重性必须为'1'._ Seq_ID不为空,并且可悲的是我无法更改它。 – StefanG

回答

0

我们采用以下解决方法:

创建模型后,直接删除的外键。不美观但有效。