LinqToSQL не обновляет базу данных - PullRequest
2 голосов
/ 30 октября 2008
// goal: update Address record identified by "id", with new data in "colVal"

string cstr = ConnectionApi.GetSqlConnectionString("SwDb"); // get connection str
using (DataContext db = new DataContext(cstr)) {
    Address addr = (from a in db.GetTable<Address>()
                    where a.Id == id
                    select a).Single<Address>();
    addr.AddressLine1 = colValue.Trim();
    db.SubmitChanges(); // this seems to have no effect!!!
}

В отладчике у addr есть все текущие значения из таблицы db, и я могу проверить, что AddressLine1 изменен непосредственно перед тем, как я вызываю db.SubmitChanges () ... SQL Profiler показывает только «сброс соединения», когда SubmitChanges строка выполняется. Кто-нибудь понял, почему это не работает? СПАСИБО! * * 1002

Ответы [ 4 ]

6 голосов
/ 30 октября 2008

Вы можете быстро просмотреть изменения, которые нужно отправить, используя метод GetChangeSet .

Также убедитесь, что в вашей таблице определен первичный ключ и что отображение знает об этом первичном ключе. В противном случае вы не сможете выполнять обновления.

1 голос
/ 30 октября 2008

Хорошо, вот результат. Я не могу использовать форму db.Address, потому что я не использовал конструктор для создания своих объектов базы данных, вместо этого я определил их как классы следующим образом:

[Table(Name = "Addresses")]
public class Address
{
    [Column(Name = "Id",IsPrimaryKey=true)]
     public int Id { get; set; }
    [Column(Name = "AddressLine1")]
    public string AddressLine1 { get; set; }
        ...

Первоначально у меня не было столбца "Id", установленного как PK в базе данных, и при этом я не идентифицировал его, используя IsPrimaryKey = true в описателе [Column ...] выше. ОБА требуются! Как только я сделал это изменение, ChangeSet нашел обновление, которое я хотел сделать, и сделал это, но перед этим он сказал мне, что нужно обновить 0 строк, и отказался зафиксировать изменения.

Спасибо за вашу помощь! - С.

1 голос
/ 30 октября 2008

Спасибо - ваши комментарии помогут мне разобраться в этом, я уверен! У меня не было столбца "Id", определенного как PrimaryKey, так что это очевидный старт Я ожидал бы, что LinqToSQL выдаст ошибку, когда обновление завершится неудачно. - S.

1 голос
/ 30 октября 2008

Забавно, использовать GetTable и Single. Я бы ожидал, что код будет выглядеть так:

string cstr = ConnectionApi.GetSqlConnectionString("SwDb"); // get connection str
using (DataContext db = new DataContext(cstr)) 
{    
  Address addr = (from a in db.Address where a.Id == id select a).Single();    
  addr.AddressLine1 = colValue.Trim();    
  db.SubmitChanges(); // this seems to have no effect!!!
}

Я понятия не имею, что с вами сделает GetTable.

Другое дело, для отладки Linq2SQL попробуйте добавить

db.Log = Console.Out;

перед SubmitChanges (), это покажет вам выполненный SQL.

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