2015-09-18 72 views
0

我使用ASP.NET MVC剃刀实体框架代码优先C#保存数据使用实体框架代码优先

类 - 一个

public class Om_Category 
{ 
    [Key] 
    public int CategoryID { get; set; } 
    public String CategoryName { get; set; } 
    public String CategorySanitized { get; set; } 
    public Boolean IsActive { get; set; } 

    public DateTime CreationDate { get; set; } 
} 

类 - B

public class Om_CategorySkills 
{ 
    [Key] 
    public Int32 SkillID { get; set; } 
    public String Skill { get; set; } 
    public String SkillSanitized { get; set; } 
    public DateTime CreationDate { get; set; } 
    public Boolean IsActive { get; set; } 

    public Om_Category Category { get; set; } 
} 

当我尝试创建表Om_CategorySkills的记录。它说 无法保存Om_Category表中的重复值。

发生这种情况是因为我在Om_CategorySkills类对象中发送了Om_Category类对象,因为Om_Category类中的某些字段是必需的。

因此,我也传递Om_CategorySkills类对象中的Om_Category类对象。有没有办法解决这个问题?

回答

0

您的导航性能似乎并不是正确的..你可以尝试(我没有测试),

public class Om_Category 
{ 
    [Key] 
    public int CategoryID { get; set; } 
    public String CategoryName { get; set; } 
    public String CategorySanitized { get; set; } 
    public Boolean IsActive { get; set; } 
    public DateTime CreationDate { get; set; } 

    public virtual Om_CategorySkills CategorySkills{ get; set; } 
} 


public class Om_CategorySkills 
{ 
    [Key] 
    public Int32 SkillID { get; set; } 
    public String Skill { get; set; } 
    public String SkillSanitized { get; set; } 
    public DateTime CreationDate { get; set; } 
    public Boolean IsActive { get; set; } 

    public int CategoryID {get;set;} 
    public virtual Om_Category Category { get; set; } 
} 
+0

一个类别可以有多种技能,一种技能会有一个类别 – Pankaj

0

我看到你的Om_CategorySkills对象缺少Int32 Om_CategoryId财产用作外交键。我还会为导航属性Category添加一个虚拟修改器,以允许延迟加载。

我认为这可能是新的/编辑过的技能中的类别对象已经在数据库中,但不是上下文检索到的类型,所以上下文认为您正在尝试保存新的类别与一个现有的Id。

你不应该试图用一个没有变化的类别对象来保存技能对象。否则,类别对象应该是附加到上下文的对象。

相关问题