0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 14
1

linq to sql - Ошибка при вставке

05.04.2011, 12:26. Показов 2649. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
есть метод для вставки:
Код
public void InsertCart(Cart cart) 
{ 
  Table<Cart> newCart = this.GetTable<Cart>(); 
  newCart.InsertOnSubmit(cart); 
  this.SubmitChanges(); 
}
при вызове:
Код
protected void Button1_Click(object sender, EventArgs e) 
{ 
  Cart cart = new Cart(); 
  cart.TypeCart = TextBox1.Text;         
  bc.InsertCart(cart); 
  TextBox1.Text = ""; 
  BindData(); 
}
наблюдется ошибка:
The operation cannot be performed during a call to SubmitChanges
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.04.2011, 12:26
Ответы с готовыми решениями:

DateTimePicker1 при вставке в Sql запрос выходит ошибка
при выборе даты (в основном) выходит ошибка. Видимо ошибка с форматом даты, но не пойму где. ...

Ошибка "недопустимое имя объекта" при использовании LINQ to SQL
Здравствуйте, уважаемые форумчане! Я начинающий разработчик ASP.NET MVC. Сейчас создаю тестовый...

Формат данных при вставке в лист из SQL
Для примера возмём запрос типа: With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _...

Ускорение Linq to SQL (Compiled Linq, Entity SQL, и т.д.)
Здравствуйте! У меня задание стоит ускорить прогу. В проге во многих местах по куче Linq запросов....

12
Padawan
473 / 323 / 30
Регистрация: 30.01.2010
Сообщений: 1,841
05.04.2011, 12:34 2
s7u, а что вообще хочется сделать?
0
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 14
05.04.2011, 12:37  [ТС] 3
надо написать слой доступа к данным

Добавлено через 2 минуты
вообщем не могу дигнастировать ошибку
0
Padawan
473 / 323 / 30
Регистрация: 30.01.2010
Сообщений: 1,841
05.04.2011, 12:47 4
s7u, ну во первых используя Linq To Sql необходимо сначала объявить DataContext.
C#
1
2
3
4
using(dc = new DataContext())
{
 var cart dc.Cart.Where(x => x.Id == 3).FirstOrDefault();
}
0
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 14
05.04.2011, 13:07  [ТС] 5
Johnny_D, он был объявлен (переменная bc)

Добавлено через 3 минуты
если сделать так:

Код
public void InsertCart(ref Cart cart) 
{ 
  Table<Cart> newCart = this.GetTable<Cart>(); 
  newCart.InsertOnSubmit(cart); 
  this.SubmitChanges(); 
}
Код
protected void Button1_Click(object sender, EventArgs e) 
{ 
  Cart cart = new Cart(); 
  cart.TypeCart = TextBox1.Text;         
  bc.InsertCart(ref cart); 
  TextBox1.Text = ""; 
  BindData(); 
}
то работает. прокомментируйте пожалуйста.

Добавлено через 13 минут
класс UnitOfWork:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
   public class UnitOfWork : IDisposable
    {
       private readonly BiblioDataContext dbase;
       public BiblioDataContext datacontext
       {
           get
           {
               return dbase;
           }
       }
 
       private bool _disposed;
 
       public UnitOfWork()
       {
           dbase = new BiblioDataContext();
       }
 
       public void Commit()
       {
           dbase.SubmitChanges();
       }
 
       public void Dispose()
       {
           Dispose(true);
           GC.SuppressFinalize(this);
       }
       private void Dispose(bool disposing)
       {
           if (!this._disposed)
           {
               if (disposing)
               {
                   dbase.Dispose();
               }
               _disposed = true;    
           }
       }
    }
класс PublishingService:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 public class PublishingService : IPublishingService
    {
      private readonly BiblioDataContext dbase = new BiblioDataContext();
 
       public PublishingService(BiblioDataContext dbase)
       {
           if (dbase == null)
               throw new ArgumentNullException("dbase");
           this.dbase = dbase;
       }
 
       public void Create(string NameOfPublishing)
       {
           if (String.IsNullOrEmpty(NameOfPublishing))
               throw new ArgumentNullException("NameOfPublishing");
 
           Publishing publishing = new Publishing()
           {
               //Id_publ = 45,
               Name_publ = NameOfPublishing
           };
 
           dbase.Publishings.InsertOnSubmit(publishing);
           //dbase.SubmitChanges();
       }
 
      public void Delete(Publishing publishing)
       {
           if (publishing == null)
               throw new ArgumentNullException("publishing");
           dbase.Publishings.DeleteOnSubmit(publishing);
       }
 
      public void Update(Publishing publishing, string NameOfPublishing)
       {
           if (publishing == null)
               throw new ArgumentNullException("publishing");
           if (String.IsNullOrEmpty(NameOfPublishing))
               throw new ArgumentNullException("NameOfPublishing");
           
           publishing.Name_publ = NameOfPublishing;
       }
    }
вызов:
C#
1
2
3
4
5
6
7
8
9
10
11
12
 protected void Button1_Click(object sender, EventArgs e)
    {
       
        using (UnitOfWork unitofwork = new UnitOfWork())
        {
            PublishingService publishingService = new PublishingService(unitofwork.datacontext);
            publishingService.Create(TextBox1.Text);
            unitofwork.Commit();
        }
        TextBox1.Text = "";
        BindData();       
    }
таже самая ошибка
0
56 / 56 / 11
Регистрация: 13.04.2009
Сообщений: 169
05.04.2011, 21:23 6
а что у тебя за таблицы в бд: какие там связи и поля?
0
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 14
06.04.2011, 11:16  [ТС] 7
кто нибудь сталкивался с ошибкой при обновлении записи? :

Cannot add an entity with a key that is already in use

код: вверху
0
56 / 56 / 11
Регистрация: 13.04.2009
Сообщений: 169
06.04.2011, 11:46 8
Ты пытаешься вставить данные с ключом, который уже есть в базе.
0
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 14
06.04.2011, 11:51  [ТС] 9
нет, я не вставляю а обновляю

Добавлено через 4 минуты
вот код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 public void Update(int ID, string Status, string State)
       {
           Item upd = new Item();
           var item = (from nameq in dbase.Items
                      where nameq.Item_Id == ID
                      select nameq).SingleOrDefault();
 
           if (String.IsNullOrEmpty(Status))
               throw new ArgumentNullException("Status");
           if (String.IsNullOrEmpty(State))
               throw new ArgumentNullException("State");
 
           upd.Item_Id = ID;
           upd.ISBN = item.ISBN.ToString();
           upd.State = item.State.ToString();
           upd.Status = item.Status.ToString();
           dbase.Items.Attach(upd);
           upd.State = State;
           upd.Status = Status;
           
       }
0
56 / 56 / 11
Регистрация: 13.04.2009
Сообщений: 169
06.04.2011, 12:03 10
попробуй upd.Item_Id = ID; вот это закоменьть. и вообще attach не так используется
0
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 14
06.04.2011, 12:12  [ТС] 11
я Attach и использую

Добавлено через 3 минуты
не, не катит. как он тогда строку найдет которую редактировать надо, вообщем: Row not found or changed

Добавлено через 3 минуты
странно что в других классах втавка, удаление и обновление работает нормально

вот код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 public void Update(int ID, string NameOfCategory)
       {
           Category upd = new Category();
           string name = (from nameq in dbase.GetTable<Category>()
                          where nameq.Id_Cat == ID
                          select new { Name_Cat = nameq.Name_Cat }).SingleOrDefault().Name_Cat.ToString();
 
           if (String.IsNullOrEmpty(NameOfCategory))
               throw new ArgumentNullException("NameOfPublishing");
           upd.Id_Cat = ID;
           upd.Name_Cat = name;
           dbase.Categories.Attach(upd);
           upd.Name_Cat = NameOfCategory;
       }
0
56 / 56 / 11
Регистрация: 13.04.2009
Сообщений: 169
06.04.2011, 15:10 12
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void Update(int ID, string Status, string State)
       {
           Item upd = new Item();
           var item = (from nameq in dbase.Items
                      where nameq.Item_Id == ID
                      select nameq).SingleOrDefault();
 
           if (String.IsNullOrEmpty(Status))
               throw new ArgumentNullException("Status");
           if (String.IsNullOrEmpty(State))
               throw new ArgumentNullException("State");
           if (item != null)
           {
               dbase.Items.Attach(item);
               item.State = State;
               item.Status = Status;
           }
попробуй так
ну и Submit... еще надо
0
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 14
06.04.2011, 15:47  [ТС] 13
бесполезно.

Cannot attach an entity that already exists.
0
06.04.2011, 15:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.04.2011, 15:47
Помогаю со студенческими работами здесь

Ошибка при вставке
При вставке записи: begin DM.Query2.DisableControls; DM.Query2.SQL.Clear; ...

Ошибка при вставке значения
Всем привет! При каждой попытке выполнить код происходить необр. исключение на строке...

Ошибка при вставке даты
когда убираю Date и @Date и строку d.InsertParameters.Add(&quot;Date&quot;, DateTime.Now.ToString()); то...

ошибка при вставке формулы
добрый день уважаемые форумчане. столкнулся со следующей проблемой: имеется некий файл dbf...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru