Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 20th, 2012  |  syntax: None  |  size: 4.37 KB  |  hits: 10  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Entity Framework 4 Custom Logic Saving Changes
  2. ObjectSet = context.CreateObjectSet<TEntity>();
  3.  
  4. BusinessEntities.Person person = new BusinessEntities.Person()
  5.         {
  6.             TitleRef = 123,
  7.             FirstName = "FirstName",
  8.             Surname = "Surname",
  9.             PhoneNumber = "PhoneNumber",
  10.             MobileNumber = "MobileNumber",
  11.             EmailAddress = "EmailAddress",
  12.         };
  13.  
  14.  
  15. ObjectSet.AddObject(entity);
  16.  
  17. Context.SaveChanges();
  18.  
  19. PersonAddress personAddress = new BusinessEntities.PersonAddress
  20.         {
  21.             StartDate = DateTime.Now,
  22.             EndDate = DateTime.Now,
  23.             OtherResidents = "OtherResidents",
  24.             CurrentAddress = true,
  25.             Address = new Address
  26.             {
  27.                 Address1 = "Address1",
  28.                 Address2 = "Address2",
  29.                 Address3 = "Address3"
  30.             }
  31.         };
  32.  
  33. Context.SaveChanges();
  34.  
  35.  
  36.     public override int SaveChanges(SaveOptions options)
  37.     {
  38.         foreach (ObjectStateEntry entry in
  39.             ObjectStateManager.GetObjectStateEntries(
  40.             EntityState.Added | EntityState.Modified))
  41.         {
  42.             System.Collections.ObjectModel.ReadOnlyCollection<FieldMetadata> fieldsMetaData = entry.CurrentValues
  43.                                   .DataRecordInfo.FieldMetadata;
  44.  
  45.             FieldMetadata createdField = fieldsMetaData
  46.             .Where(f => f.FieldType.Name == "CreatedBy").FirstOrDefault();
  47.  
  48.             FieldMetadata modifiedField = fieldsMetaData
  49.             .Where(f => f.FieldType.Name == "LastUpdatedBy").FirstOrDefault();
  50.  
  51.             if (modifiedField.FieldType != null)
  52.             {
  53.                 string fieldTypeName = modifiedField.FieldType.TypeUsage.EdmType.Name;
  54.                 if (fieldTypeName == PrimitiveTypeKind.String.ToString())
  55.                 {
  56.                     if (entry.CurrentValues[createdField.Ordinal].ToString() == null ||
  57.                        entry.CurrentValues[createdField.Ordinal].ToString() == String.Empty)
  58.                     {
  59.                         entry.CurrentValues.SetString(createdField.Ordinal, CustomRepository.CurrentUser);
  60.                     }
  61.  
  62.                     entry.CurrentValues.SetString(modifiedField.Ordinal, CustomRepository.CurrentUser);
  63.                 }
  64.             }
  65.         }
  66.         return base.SaveChanges(options);
  67.     }
  68.        
  69. private void Initialize()
  70.     {
  71.         // Creating proxies requires the use of the ProxyDataContractResolver and
  72.         // may allow lazy loading which can expand the loaded graph during serialization.
  73.         ContextOptions.ProxyCreationEnabled = false;
  74.         ObjectMaterialized += new ObjectMaterializedEventHandler(HandleObjectMaterialized);
  75.  
  76.         OnContextCreated();
  77.     }
  78.  
  79.     private void OnContextCreated()
  80.     {    
  81.         this.SavingChanges += Context_SavingChanges;
  82.     }
  83.        
  84. IEnumerable<ObjectStateEntry> objectStateEntries =
  85.             from ose
  86.             in this.ObjectStateManager.GetObjectStateEntries(EntityState.Added
  87.                                                                 | EntityState.Modified)
  88.             where ose.Entity != null
  89.             select ose;
  90.  
  91.             foreach (ObjectStateEntry entry in objectStateEntries)
  92.             {
  93.                 System.Collections.ObjectModel.ReadOnlyCollection<FieldMetadata> fieldsMetaData = entry.CurrentValues
  94.                     .DataRecordInfo.FieldMetadata;
  95.  
  96.                 FieldMetadata createdField = fieldsMetaData
  97.                 .Where(f => f.FieldType.Name == "CreatedBy").FirstOrDefault();
  98.  
  99.                 FieldMetadata modifiedField = fieldsMetaData
  100.                 .Where(f => f.FieldType.Name == "LastUpdatedBy").FirstOrDefault();
  101.  
  102.                 if (modifiedField.FieldType != null)
  103.                 {
  104.                     string fieldTypeName = modifiedField.FieldType.TypeUsage.EdmType.Name;
  105.                     if (fieldTypeName == PrimitiveTypeKind.String.ToString())
  106.                     {
  107.                         if (entry.CurrentValues[createdField.Ordinal].ToString() == null ||
  108.                            entry.CurrentValues[createdField.Ordinal].ToString() == String.Empty)
  109.                         {
  110.                             entry.CurrentValues.SetString(createdField.Ordinal, CustomRepository.CurrentUser);
  111.                         }
  112.  
  113.                         entry.CurrentValues.SetString(modifiedField.Ordinal, CustomRepository.CurrentUser);
  114.                     }
  115.                 }
  116.             }