- Entity Framework 4 Custom Logic Saving Changes
- ObjectSet = context.CreateObjectSet<TEntity>();
- BusinessEntities.Person person = new BusinessEntities.Person()
- {
- TitleRef = 123,
- FirstName = "FirstName",
- Surname = "Surname",
- PhoneNumber = "PhoneNumber",
- MobileNumber = "MobileNumber",
- EmailAddress = "EmailAddress",
- };
- ObjectSet.AddObject(entity);
- Context.SaveChanges();
- PersonAddress personAddress = new BusinessEntities.PersonAddress
- {
- StartDate = DateTime.Now,
- EndDate = DateTime.Now,
- OtherResidents = "OtherResidents",
- CurrentAddress = true,
- Address = new Address
- {
- Address1 = "Address1",
- Address2 = "Address2",
- Address3 = "Address3"
- }
- };
- Context.SaveChanges();
- public override int SaveChanges(SaveOptions options)
- {
- foreach (ObjectStateEntry entry in
- ObjectStateManager.GetObjectStateEntries(
- EntityState.Added | EntityState.Modified))
- {
- System.Collections.ObjectModel.ReadOnlyCollection<FieldMetadata> fieldsMetaData = entry.CurrentValues
- .DataRecordInfo.FieldMetadata;
- FieldMetadata createdField = fieldsMetaData
- .Where(f => f.FieldType.Name == "CreatedBy").FirstOrDefault();
- FieldMetadata modifiedField = fieldsMetaData
- .Where(f => f.FieldType.Name == "LastUpdatedBy").FirstOrDefault();
- if (modifiedField.FieldType != null)
- {
- string fieldTypeName = modifiedField.FieldType.TypeUsage.EdmType.Name;
- if (fieldTypeName == PrimitiveTypeKind.String.ToString())
- {
- if (entry.CurrentValues[createdField.Ordinal].ToString() == null ||
- entry.CurrentValues[createdField.Ordinal].ToString() == String.Empty)
- {
- entry.CurrentValues.SetString(createdField.Ordinal, CustomRepository.CurrentUser);
- }
- entry.CurrentValues.SetString(modifiedField.Ordinal, CustomRepository.CurrentUser);
- }
- }
- }
- return base.SaveChanges(options);
- }
- private void Initialize()
- {
- // Creating proxies requires the use of the ProxyDataContractResolver and
- // may allow lazy loading which can expand the loaded graph during serialization.
- ContextOptions.ProxyCreationEnabled = false;
- ObjectMaterialized += new ObjectMaterializedEventHandler(HandleObjectMaterialized);
- OnContextCreated();
- }
- private void OnContextCreated()
- {
- this.SavingChanges += Context_SavingChanges;
- }
- IEnumerable<ObjectStateEntry> objectStateEntries =
- from ose
- in this.ObjectStateManager.GetObjectStateEntries(EntityState.Added
- | EntityState.Modified)
- where ose.Entity != null
- select ose;
- foreach (ObjectStateEntry entry in objectStateEntries)
- {
- System.Collections.ObjectModel.ReadOnlyCollection<FieldMetadata> fieldsMetaData = entry.CurrentValues
- .DataRecordInfo.FieldMetadata;
- FieldMetadata createdField = fieldsMetaData
- .Where(f => f.FieldType.Name == "CreatedBy").FirstOrDefault();
- FieldMetadata modifiedField = fieldsMetaData
- .Where(f => f.FieldType.Name == "LastUpdatedBy").FirstOrDefault();
- if (modifiedField.FieldType != null)
- {
- string fieldTypeName = modifiedField.FieldType.TypeUsage.EdmType.Name;
- if (fieldTypeName == PrimitiveTypeKind.String.ToString())
- {
- if (entry.CurrentValues[createdField.Ordinal].ToString() == null ||
- entry.CurrentValues[createdField.Ordinal].ToString() == String.Empty)
- {
- entry.CurrentValues.SetString(createdField.Ordinal, CustomRepository.CurrentUser);
- }
- entry.CurrentValues.SetString(modifiedField.Ordinal, CustomRepository.CurrentUser);
- }
- }
- }