LINQ для SQL один-один отношения C # - PullRequest
1 голос
/ 22 февраля 2012

Необходимо, чтобы после создания записи в таблице «Клиенты» занялся ID. Позже ID используется для создания новой записи в "Clients_details".

        var user = GetUsers();
        var userdet = GetclientsDetails();

        string hashedpass = getMd5Hash(UIPassword.Text);

        var newreg = new Clients
        {
            login = UILogin.Text,
            password = hashedpass,
            subscribeid = Convert.ToInt32(UIId.Text)
        };

        user.InsertOnSubmit(newreg);
        user.Context.SubmitChanges();

        var details = new Clients_details
        {
            city = UICity.Text,
            first_name = UIFirst_name.Text,
            last_name = UIFamiliya.Text,
            name = UIName.Text,
            Clients = newreg
        };

        userdet.InsertOnSubmit(details);
        userdet.Context.SubmitChanges();

После сбоя этого кода: "Была предпринята попытка выполнить операцию Присоединить или Добавить в отношении объекта, который не является новым и, возможно, загружен из другого DataContext. Эта операция не поддерживается."

DBML

Как правильно создать запись, в которой нет ошибки? Спасибо!

    private static Table<Clients> GetUsers()
    {
        var dce = new BaseDBMLDataContext();
        return dce.Clients;
    }

    private static Table<Clients_details> GetclientsDetails()
    {
        var dce = new BaseDBMLDataContext();
        return dce.Clients_details;
    }

Ответы [ 4 ]

0 голосов
/ 22 февраля 2012

Да, похоже, вы используете два разных экземпляра одного и того же контекста:

user.Context.SubmitChanges();
userdet.Context.SubmitChanges();

Хороший подход к созданию ваших сущностей должен выглядеть примерно так:

//Create your client details entity
var details = new Clients_details
{
    city = UICity.Text,
    first_name = UIFirst_name.Text,
    last_name = UIFamiliya.Text,
    name = UIName.Text    
};

//Create your client entity
var newreg = new Clients
{
    login = UILogin.Text,
    password = hashedpass,
    subscribeid = Convert.ToInt32(UIId.Text),
    //Assigning the details entity (FK) to the client
    ClientDetails = details
};

//Saving both the client and its details
user.InsertOnSubmit(newreg);
user.Context.SubmitChanges();
0 голосов
/ 22 февраля 2012

Я думаю, что вам нужно вызывать SubmitChanges только один раз в конце, а также вы должны убедиться, что пользователь и userdet, которые вы используете, используют один и тот же контекст

0 голосов
/ 22 февраля 2012

Как ясно указывает на ошибку, вы используете разные контексты (user и userdet) для каждой сущности, которую нужно добавить.У вас должен быть один DataContext и использовать его для добавления сущностей.

0 голосов
/ 22 февраля 2012

Похоже, userdet.Context и user.Context были построены с использованием другого dataContext, и его нужно создавать с использованием того же dataContext, а не создавать новый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...