C# 我的类正在数据库中创建条目,我希望它停止

C# 我的类正在数据库中创建条目,我希望它停止,c#,entity-framework,C#,Entity Framework,我正在做一个项目,首先使用实体框架和代码。这是我缩短的课程 public class BenefitsForm : IAnnualForm, IAuditable { public BenefitsUser UserInfo { get; set; } public CoverageLevel Medical { get; set; } } public class MedicalPlan : IHealthPlan { public int Id { get; se

我正在做一个项目,首先使用实体框架和代码。这是我缩短的课程

public class BenefitsForm : IAnnualForm, IAuditable 
{
    public BenefitsUser UserInfo { get; set; }
    public CoverageLevel Medical { get; set; }
}

public class MedicalPlan : IHealthPlan
{
    public int Id { get; set; }
    public virtual IList<CoverageLevel> CoverageLevels { get; set; }
}

public class CoverageLevel
{
    public int Id { get; set; }
    public virtual MedicalPlan MedicalPlan { get; set; }
}

请尝试使用,而不是formRepository.SaveChanges(),以将SaveChanges与SaveOptions枚举一起使用

例如:

ObjectContext.SaveChanges(
           System.Data.Objects.SaveOptions.DetectChangesBeforeSave
                   );

有关更多信息,请参见链接

对于一对多关联,使用
IList
而不是
ICollection
可能会导致它发生故障。试着改变一下。除此之外,可能是您未发布的
CoverageLevelRepository
中的代码。有关关联的更多信息,请参见

,我认为这是因为您从不同的上下文中检索医疗字段,而不是保存在--
repo
vs.
formRepository
formRepository
没有跟踪由
repo
创建的对象,因此它假定它是一个新对象,从而创建一个重复条目。出于性能原因,我不相信实体框架会为您插入存在性检查——跟踪由对象上下文本身在内部处理;每个对象都绑定到单个对象上下文。尝试使用相同的存储库检索
医疗计划
,并写回新的
福利表单
,您不应该有重复项

BenefitsForm form = new BenefitsForm() { UserInfo = new BenefitsUser() }; 
using(var repo = new Repository()) 
{ 
  form.Medical = repo.Retrieve(new NumericKey(formId))); //this retrieves the coveragelevel with the id I want. 
  repo.Create(form); // this creates a duplicate med plan and 4 duplicate coverage levels. 
  repo.SaveChanges(); 
} 

将所有类设置为“可序列化”会导致问题吗?如果您知道在数据库中创建重复项的方法,请在创建它之前验证它不存在。
BenefitsForm form = new BenefitsForm() { UserInfo = new BenefitsUser() }; 
using(var repo = new Repository()) 
{ 
  form.Medical = repo.Retrieve(new NumericKey(formId))); //this retrieves the coveragelevel with the id I want. 
  repo.Create(form); // this creates a duplicate med plan and 4 duplicate coverage levels. 
  repo.SaveChanges(); 
}