예제 #1
0
        public void Save(object entity)
        {
            // is it a new object?
            if (!_identityMap.HasEntity(entity))
            {
                // already beging saved?
                if (_saved.Contains(entity))
                {
                    return;
                }

                // then assign it an identifier
                var accessor = _store.GetIdAccessor(entity.GetType(), "Id");
                if (accessor != null)
                {
                    var id = accessor.Get(entity);

                    // do we need to track the entity
                    if (id > 0)
                    {
                        _identityMap.Add(id, entity);
                        _updated.Add(entity);
                        return;
                    }
                    else
                    {
                        // it's a new entity
                        var collection = CollectionHelper.Current.GetSafeName();
                        id = _store.GetNextId(collection);
                        accessor.Set(entity, id);
                    }
                }

                _saved.Add(entity);
            }
            else
            {
                // update it
                _updated.Add(entity);
            }
        }