powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как заставить Linq2Sql модифицировать записи по первичному ключу?
4 сообщений из 4, страница 1 из 1
Как заставить Linq2Sql модифицировать записи по первичному ключу?
    #38078207
Ниггадяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть некий мэпинг-класс. В классе определены с десяток свойств разных типов, в том числе ID целочисленного типа. Для этих свойств определены атрибуты ColumnAttribute. Для свойства ID в атрибуте указано , что это IsPrimaryKey и IsDBGenerated! На стороне БД для колонки определено, что она IDENTITY, есть первичный ключ.

Код: 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.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
   /// <summary>
    /// Начисления.
    /// </summary>
    [TableAttribute(Name="dbo.cmp_Charges")]
    public partial class Charge : Composition, IIdentified {
        
        int? _iD;

        [ColumnAttribute(Storage = "_iD", DbType = "int", Name = "ID", IsPrimaryKey = true, CanBeNull = false, IsDbGenerated = true)]
        public int? ID {
            get {
                return _iD;
            }
        }
        
        DateTime _date;
        
        /// <summary>
        /// Дата.
        /// </summary>
        [ColumnAttribute(Storage="_date", DbType="datetime NOT NULL", Name="Date", CanBeNull=false)]
        public DateTime Date {
            get {
                return _date;
            }
            set {
                if ((_date == value)) {
                    return;
                }
                OnPropertyChanging("Date");
                _date = value;
                OnPropertyChanged("Date");
            }
        }
        
        short _year;
        
        /// <summary>
        /// Год.
        /// </summary>
        [ColumnAttribute(Storage="_year", DbType="smallint NOT NULL", Name="Year", CanBeNull=false)]
        public short Year {
            get {
                return _year;
            }
            set {
                if ((_year == value)) {
                    return;
                }
                OnPropertyChanging("Year");
                _year = value;
                OnPropertyChanged("Year");
            }
        }
        
        short _month;
        
        /// <summary>
        /// Месяц.
        /// </summary>
        [ColumnAttribute(Storage="_month", DbType="smallint NOT NULL", Name="Month", CanBeNull=false)]
        public short Month {
            get {
                return _month;
            }
            set {
                if ((_month == value)) {
                    return;
                }
                OnPropertyChanging("Month");
                _month = value;
                OnPropertyChanged("Month");
            }
        }
        
        decimal _percent;
        
        /// <summary>
        /// %.
        /// </summary>
        [ColumnAttribute(Storage="_percent", DbType="decimal(5,2) NOT NULL", Name="Percent", CanBeNull=false)]
        [NumericAttribute(5, 2)]
        public decimal Percent {
            get {
                return _percent;
            }
            set {
                value = Maths.Round(value, 2);
                if ((_percent == value)) {
                    return;
                }
                OnPropertyChanging("Percent");
                _percent = value;
                OnPropertyChanged("Percent");
            }
        }
        
        short _formula;
        
        /// <summary>
        /// Формула.
        /// </summary>
        [ColumnAttribute(Storage="_formula", DbType="smallint NOT NULL", Name="Formula", CanBeNull=false)]
        public short Formula {
            get {
                return _formula;
            }
            set {
                if ((_formula == value)) {
                    return;
                }
                OnPropertyChanging("Formula");
                _formula = value;
                OnPropertyChanged("Formula");
            }
        }
        
        short _days;
        
        /// <summary>
        /// Дней.
        /// </summary>
        [ColumnAttribute(Storage="_days", DbType="smallint NOT NULL", Name="Days", CanBeNull=false)]
        public short Days {
            get {
                return _days;
            }
            set {
                if ((_days == value)) {
                    return;
                }
                OnPropertyChanging("Days");
                _days = value;
                OnPropertyChanged("Days");
            }
        }
        
        decimal _hours;
        
        /// <summary>
        /// Часов.
        /// </summary>
        [ColumnAttribute(Storage="_hours", DbType="decimal(5,2) NOT NULL", Name="Hours", CanBeNull=false)]
        [NumericAttribute(5, 2)]
        public decimal Hours {
            get {
                return _hours;
            }
            set {
                value = Maths.Round(value, 2);
                if ((_hours == value)) {
                    return;
                }
                OnPropertyChanging("Hours");
                _hours = value;
                OnPropertyChanged("Hours");
            }
        }
        
        decimal _primarySum;
        
        /// <summary>
        /// Сумма исходная.
        /// </summary>
        [ColumnAttribute(Storage="_primarySum", DbType="decimal(15,2) NOT NULL", Name="PrimarySum", CanBeNull=false)]
        [NumericAttribute(15, 2)]
        public decimal PrimarySum {
            get {
                return _primarySum;
            }
            set {
                value = Maths.Round(value, 2);
                if ((_primarySum == value)) {
                    return;
                }
                OnPropertyChanging("PrimarySum");
                _primarySum = value;
                OnPropertyChanged("PrimarySum");
            }
        }
        
        decimal _resultSum;
        
        /// <summary>
        /// Сумма расчетная.
        /// </summary>
        [ColumnAttribute(Storage="_resultSum", DbType="decimal(15,2) NOT NULL", Name="ResultSum", CanBeNull=false)]
        [NumericAttribute(15, 2)]
        public decimal ResultSum {
            get {
                return _resultSum;
            }
            set {
                value = Maths.Round(value, 2);
                if ((_resultSum == value)) {
                    return;
                }
                OnPropertyChanging("ResultSum");
                _resultSum = value;
                OnPropertyChanged("ResultSum");
            }
        }
        
        string _costCode;
        
        /// <summary>
        /// Код затрат.
        /// </summary>
        [ColumnAttribute(Storage="_costCode", DbType="nvarchar(8) NULL", Name="CostCode", CanBeNull=true)]
        [SizeAttribute(8)]
        public string CostCode {
            get {
                return _costCode;
            }
            set {
                if (((value != null) 
                            && (value.Length > 8))) {
                    value = value.Substring(0, 8);
                }
                if ((_costCode == value)) {
                    return;
                }
                OnPropertyChanging("CostCode");
                _costCode = value;
                OnPropertyChanged("CostCode");
            }
        }
        
... и тд.
    }
   



Получив через контекст данных существующие записи определенной таблицы, меняю пару значений у свойств объекта..вызываю сохранение. смотрю в профайлер СКЛ и ужасаюсь: при обновлении записи вместо условия по первичному ключу (WHERE [ID] = somevalue), используется все привязанные свойства!

Код: sql
1.
2.
3.
exec sp_executesql N'UPDATE [dbo].[doc_AppointOverlapping]
SET [Posted] = @p7, [State] = @p8
WHERE ([ID] = @p0) AND ([ChKind] = @p1) AND ([Number] = @p2) AND ([Date] = @p3) AND ([PeriodicDate] = @p4) AND (NOT ([DeletionMark] = 1)) AND (NOT ([Posted] = 1)) AND ([ExecDate] = @p5) AND ([State] = @p6) AND ([Comment] IS NULL)',N'@p0 int,@p1 int,@p2 nvarchar(1),@p3 datetime,@p4 datetime,@p5 datetime,@p6 int,@p7 bit,@p8 int',@p0=1,@p1=1,@p2=N'1',@p3='2012-12-12 18:00:09:923',@p4='2012-01-01 00:00:00:000',@p5='2012-12-12 18:00:10:780',@p6=1,@p7=1,@p8=4



Как так? У меня же есть первичный ключ, который по своей природе еще и индекс. Неужели это промах разработчиков или что-то не хватает в моём мэпинге?
...
Рейтинг: 0 / 0
Как заставить Linq2Sql модифицировать записи по первичному ключу?
    #38078230
Ниггадяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не тот кусок из профайлера выдернул..ссори..

Код: sql
1.
2.
3.
UPDATE [dbo].[cmp_Charges]
SET [Empl] = @p16
WHERE ([ID] = @p0) AND ([RegularCharge] IS NULL) AND ([Kind] = @p1) AND ([RegularPayment] IS NULL) AND ([WCond] IS NULL) AND ([Date] = @p2) AND ([Year] = @p3) AND ([Month] = @p4) AND ([Percent] = @p5) AND ([Formula] = @p6) AND ([Days] = @p7) AND ([Hours] = @p8) AND ([PrimarySum] = @p9) AND ([ResultSum] = @p10) AND ([CostCode] IS NULL) AND ([InputMode] = @p11) AND ([Comment] = @p12) AND ([CexCode] IS NULL) AND ([Empl] = @p13) AND ([RType] = @p14) AND ([RID] = @p15)',N'@p0 int,@p1 int,@p2 datetime,@p3 smallint,@p4 smallint,@p5 decimal(5,2),@p6 smallint,@p7 smallint,@p8 decimal(5,2),@p9 decimal(15,2),@p10 decimal(15,2),@p11 nvarchar(1),@p12 nvarchar(12),@p13 int,@p14 int,@p15 int,@p16 int',@p0=1,@p1=1,@p2='2012-12-12 18:00:09:923',@p3=2012,@p4=12,@p5=100.00,@p6=2,@p7=0,@p8=5.00,@p9=5000.00,@p10=5000.00,@p11=N'Д',@p12=N'1 Совмещение',@p13=-1,@p14=166,@p15=1,@p16=1




просто количество изменяемых объектов может быть до тысячи и как бы, пологаясь на индекс, я расчитывал что обновление будет происходить оптимально быстро, но с такими условиями можно будет идти покурить при сохранении
...
Рейтинг: 0 / 0
Как заставить Linq2Sql модифицировать записи по первичному ключу?
    #38078270
Ниггадяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да и потом если запись была уже изменена кем-то другим, то апдейт вообще не отработается
...
Рейтинг: 0 / 0
Как заставить Linq2Sql модифицировать записи по первичному ключу?
    #38079167
Ниггадяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как заставить Linq2Sql модифицировать записи по первичному ключу?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]