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();
}