C # Linq удаляет значение из моей сущности - PullRequest
0 голосов
/ 22 сентября 2011

Итак, в отчаянной попытке превратить 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 произвольно установил бы его на ноль, если он имеет допустимое значение, которое соответствует требованиям ограничения на внешний ключ.

Что мне здесь не хватает?

Ответы [ 2 ]

1 голос
/ 22 сентября 2011

Вы, вероятно, должны установить Method = orig.Method, но я, конечно, не вижу ваш dbml.

0 голосов
/ 22 сентября 2011

Я думаю, вам нужно прикрепить ссылку на внешний ключ

var cpy = new Payment()
{
    //pk
    ID = orig.ID,
    //other fields
    Information = orig.Information,
    Amount = orig.Amount,
    Approved = orig.Approved,
    AwardedPoints = orig.AwardedPoints,
    DateReceived = orig.DateReceived
};

//create stub entity for the Method and Add it.
var method = new Method{MethodId=orig.MethodId)
_ctx.AttachTo("Methods", method);
cpy.Methods.Add(method);

//attach it
_ctx.MyEntities.Attach(cpy, o);

//submit the changes
_ctx.SubmitChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...