我遇到了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'不是最好的方法?
答案 0 :(得分:2)
您必须明确创建外键,例如:
public int UserId { get; set; }
public virtual User User { get; set; }
然后你可以这样做:
User u = GetUserById(1);
myMeasurement.UserId = u.Id;