我在与实体框架5和MVC C#4实体框架增加了重复实体数据库
我有一个模型(医疗)“测量”具有以下属性的一个问题:
[DataMember]
public int ID { get; set; }
[Required]
[DataMember(IsRequired = true)]
[Column(TypeName = "DateTime2")]
public DateTime Date { get; set; }
[Required]
[DataMember(IsRequired = true)]
public Status Status { get; set; }
[Required]
[DataMember(IsRequired = true)]
public User User { get; set; }
[Required]
[DataMember(IsRequired = true)]
public virtual List<Result> Results { get; set; }
该模型的结果是这样的:
[DataMember]
public int ID { get; set; }
[DataMember]
public int Revision { get; set; }
[DataMember]
public string Comment { get; set; }
[DataMember]
public string ValueString { get; set; }
[DataMember]
public int ValueInt { get; set; }
[Required]
[DataMember]
public virtual MeasurementType MeasurementType { get; set; }
和模型MeasurementType(如长度,年龄,性别,血压)是:
public int ID { get; set; }
[Required]
[DataMember]
public string Name { get; set; }
[DataMember]
public string Unit { get; set; }
我有一个与DbContext连接的Repository。当我想添加一个新的测量时,测量类型,用户,公司和角色(都在用户中)也被添加到数据库中,但它们已经存在于数据库中。结果是,有很多MeasurementType的副本和用户
的这是添加新的测量方法:
public void Post(Measurement measurement)
{
db.Measurements.Add(measurement);
db.SaveChanges();
}
我知道这个问题,Measurement.User和Result.MeasurementType的EntityState有将被替换而不是添加,但我无法使它们保持不变。 我已经尝试了几个解决方案,就像Attach(Measurement.MeasurementType)一样在这里发现,但是这给了我一个像“ObjectStateManager中已经有一个对象具有相同的键”的错误。
我做错了什么?它是Measurement和MeasurementType(多对多)之间的模型还是关系,还是存储库方法中的错误,还是使用关键字“虚拟”不是最好的方法?
你是如何生成你的ID的? –
@ User3805967它们是由Entity Framework自动生成的。 – Pino112
为什么实体框架将现有对象重新插入到我的数据库中? msdn.microsoft.com/en-us/magazine/dn166926.aspx – Colin