Итак, в отчаянной попытке превратить EntityFramework в пригодность для использования. Я здесь ..
private MyEntity Update(MyEntity orig)
{
//need a fresh copy so we can attach without adding timestamps
//to every table....
MyEntity ent;
using (var db = new DataContext())
{
ent = db.MyEntities.Single(x => x.Id == orig.Id);
}
//fill a new one with the values of the one we want to save
var cpy = new Payment()
{
//pk
ID = orig.ID,
//foerign key
MethodId = orig.MethodId,
//other fields
Information = orig.Information,
Amount = orig.Amount,
Approved = orig.Approved,
AwardedPoints = orig.AwardedPoints,
DateReceived = orig.DateReceived
};
//attach it
_ctx.MyEntities.Attach(cpy, ent);
//submit the changes
_ctx.SubmitChanges();
}
_ctx - переменная экземпляра для хранилища, в котором находится этот метод.
Проблема в том, что когда я вызываю SubmitChanges, значение MethodId во вновь прикрепленной копии отправляется на сервер как 0, когда оно фактически не равно нулю, если я распечатываю его после вложения, но перед отправкой. Я почти уверен, что это связано с тем фактом, что поле является внешним ключом, но я до сих пор не понимаю, почему Linq произвольно установил бы его на ноль, если он имеет допустимое значение, которое соответствует требованиям ограничения на внешний ключ.
Что мне здесь не хватает?