我想我在这里遗漏了一些简单的东西。我收到错误消息:
“违反 PRIMARY KEY 约束 'PK_FeatureTypes'。无法在对象 'dbo.FeatureTypeCodes' 中插入重复键。重复键值为 (28)。\r\n语句已终止”
我有一个 FeatureType - (Mountain, Lake, River, etc.) 的查找/链接表,它已经填充了数据并定义为:
[Table("FeatureTypeCodes")]
public class FeatureTypeCode {
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int FeatureTypeCodeID { get; set; }
public string Name { get; set; }
}
这链接到我的位置表/对象,如下所示:
[Table("Places")]
public class Place {
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int PlaceID { get; set; }
public string Name { get; set; }
public FeatureTypeCode FeatureTypeCode { get; set; }
public ICollection<PlaceCoordinate> PlaceCoordinates { get; set; }
}
然后我像这样从旧数据库中加载它们(它是我的转换代码的一部分):
foreach (DataRow r in table.Rows) {
int ftID = Convert.ToInt32(r["FeatureTypeId"]);
Place temp = new Place {
PlaceID = Convert.ToInt32(r["PlaceID"]),
Name = r["PlaceName"].ToString(),
FeatureTypeCode = featureTypeCodeRepository.FeatureTypeCodes.FirstOrDefault(o=>o.FeatureTypeCodeID == ftID)
};
places.Add(temp);
}
当它在保存地点时尝试插入具有与现有对象相同 ID 的新 FeatureType 对象时,会生成错误。我的想法是,通过从上下文中加载 FeatureType,它不会尝试在保存 Place 对象时插入新的 FeatureType。我显然错了,但我错过了一些简单的事情吗?