@@ -164,17 +164,23 @@ protected override void AddItem(TEntity entity)
164164 . Select ( x => x . Key )
165165 . SingleOrDefault ( ) ;
166166
167+ var hasTemporaryKey = false ;
168+
167169 if ( key != null && key . Equals ( default ( TKey ) ) )
168170 {
169171 key = GetPrimaryKey ( entity ) ;
170172
171173 if ( key != null && key . Equals ( default ( TKey ) ) )
172174 {
173175 key = GenerateTemporaryPrimaryKey ( ) ;
176+ hasTemporaryKey = true ;
174177 }
175178 }
176179
177- _context [ key ] = new EntitySet < TEntity , TKey > ( entity , key , EntityState . Added ) ;
180+ _context [ key ] = new EntitySet < TEntity , TKey > ( entity , key , EntityState . Added )
181+ {
182+ HasTemporaryKey = hasTemporaryKey
183+ } ;
178184 }
179185
180186 /// <summary>
@@ -183,13 +189,18 @@ protected override void AddItem(TEntity entity)
183189 protected override void DeleteItem ( TEntity entity )
184190 {
185191 var key = GetPrimaryKey ( entity ) ;
192+ var hasTemporaryKey = false ;
186193
187194 if ( key != null && key . Equals ( default ( TKey ) ) )
188195 {
189196 key = GenerateTemporaryPrimaryKey ( ) ;
197+ hasTemporaryKey = true ;
190198 }
191199
192- _context [ key ] = new EntitySet < TEntity , TKey > ( entity , key , EntityState . Removed ) ;
200+ _context [ key ] = new EntitySet < TEntity , TKey > ( entity , key , EntityState . Removed )
201+ {
202+ HasTemporaryKey = hasTemporaryKey
203+ } ;
193204 }
194205
195206 /// <summary>
@@ -198,13 +209,18 @@ protected override void DeleteItem(TEntity entity)
198209 protected override void UpdateItem ( TEntity entity )
199210 {
200211 var key = GetPrimaryKey ( entity ) ;
212+ var hasTemporaryKey = false ;
201213
202214 if ( key != null && key . Equals ( default ( TKey ) ) )
203215 {
204216 key = GenerateTemporaryPrimaryKey ( ) ;
217+ hasTemporaryKey = true ;
205218 }
206219
207- _context [ key ] = new EntitySet < TEntity , TKey > ( entity , key , EntityState . Modified ) ;
220+ _context [ key ] = new EntitySet < TEntity , TKey > ( entity , key , EntityState . Modified )
221+ {
222+ HasTemporaryKey = hasTemporaryKey
223+ } ;
208224 }
209225
210226 /// <summary>
@@ -218,29 +234,28 @@ protected override void SaveChanges()
218234
219235 foreach ( var entitySet in _context . Select ( y => y . Value ) )
220236 {
221- var temporaryKey = entitySet . Key ;
222- var key = GetPrimaryKey ( entitySet . Entity ) ;
237+ var key = entitySet . Key ;
223238
224239 if ( entitySet . State == EntityState . Added )
225240 {
226- if ( key == null || key . Equals ( default ( TKey ) ) )
241+ if ( entitySet . HasTemporaryKey )
227242 {
228243 key = GeneratePrimaryKey ( ) ;
229244 SetPrimaryKey ( entitySet . Entity , key ) ;
230245 }
231- else if ( context . ContainsKey ( temporaryKey ) )
246+ else if ( context . ContainsKey ( key ) )
232247 {
233248 throw new InvalidOperationException ( string . Format ( CultureInfo . CurrentCulture , Resources . EntityAlreadyBeingTrackedInStore , entitySet . Entity . GetType ( ) ) ) ;
234249 }
235250 }
236- else if ( ! context . ContainsKey ( temporaryKey ) )
251+ else if ( ! context . ContainsKey ( key ) )
237252 {
238253 throw new InvalidOperationException ( Resources . EntityNotFoundInStore ) ;
239254 }
240255
241256 if ( entitySet . State == EntityState . Removed )
242257 {
243- context . Remove ( temporaryKey ) ;
258+ context . Remove ( key ) ;
244259 }
245260 else
246261 {
@@ -261,8 +276,8 @@ protected override IQueryable<TEntity> GetQuery(IFetchStrategy<TEntity> fetchStr
261276 {
262277 return InMemoryCache < TEntity , TKey > . Instance
263278 . GetContext ( DatabaseName )
264- . AsQueryable ( )
265- . Select ( y => y . Value ) ;
279+ . Select ( y => y . Value )
280+ . AsQueryable ( ) ;
266281 }
267282
268283 /// <summary>
@@ -320,6 +335,11 @@ public EntitySet(TEntity entity, TKey key, EntityState state)
320335 /// </summary>
321336 public EntityState State { get ; }
322337
338+ /// <summary>
339+ /// Gets or sets a value indicating whether this instance has a temporary key.
340+ /// </summary>
341+ public bool HasTemporaryKey { get ; set ; }
342+
323343 #endregion
324344 }
325345
@@ -334,8 +354,7 @@ private enum EntityState
334354 {
335355 Added ,
336356 Removed ,
337- Modified ,
338- Unchanged
357+ Modified
339358 }
340359
341360 #endregion
0 commit comments