【发布时间】:2013-12-26 10:24:42
【问题描述】:
我在使用 Entity Framework 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 连接的存储库。当我想添加一个新的测量时,测量类型、用户、公司和角色(都在用户中)也被添加到数据库中,但它们已经存在于数据库中。结果是MeasurementType和Users有很多重复
这是添加新测量的方法:
public void Post(Measurement measurement)
{
db.Measurements.Add(measurement);
db.SaveChanges();
}
我知道问题所在,Measurement.User 和 Result.MeasurementType 的 EntityState 必须是 Unchanged 而不是 Additional,但我无法将它们设为 Unchanged。 我已经尝试过在 SO 上找到的几种解决方案,例如 Attach(Measurement.MeasurementType),但这给了我一个错误,例如“具有相同键的对象已经在 ObjectStateManager 中”。
我做错了什么?是模型还是Measurement和MeasurementType(多对多)之间的关系,或者是存储库方法中的错误,还是使用关键字“虚拟”不是最好的方法?
【问题讨论】:
-
你是如何生成你的 ID 的?
-
@User3805967 它们是由实体框架自动生成的。
-
为什么实体框架将现有对象重新插入到我的数据库中? msdn.microsoft.com/en-us/magazine/dn166926.aspx
标签: c# asp.net-mvc entity-framework duplicates dbcontext