实体框架在数据库中添加重复实体

时间:2013-12-09 10:37:25

标签: c# asp.net-mvc entity-framework duplicates dbcontext

我遇到了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连接的存储库。当我想添加新的Measurement时,MeasurementType,User,Company和Roles(都在User中)也会添加到数据库中,但它们已经存在于数据库中。结果是MeasurementType和Users

有很多重复

这是添加新测量的方法:

public void Post(Measurement measurement)
{
    db.Measurements.Add(measurement);
    db.SaveChanges();
}

我知道问题,Measurement.User和Result.MeasurementType的EntityState必须是Unchanged而不是Added,但是我无法将它们置于Unchanged状态。 我已经尝试过在这里找到的几个解决方案,如Attach(Measurement.MeasurementType),但这给我一个错误,例如“具有相同键的对象已经在ObjectStateManager中”。

我做错了什么?它是Measurement和MeasurementType之间的模型或关系(多对多)还是Repository-method中的错误,或者使用关键字'Virtual'不是最好的方法?

1 个答案:

答案 0 :(得分:2)

您必须明确创建外键,例如:

public int UserId { get; set; }
public virtual User User { get; set; }

然后你可以这样做:

User u = GetUserById(1);
myMeasurement.UserId = u.Id;
相关问题