Hi, running Postgres 8.4.x, 2.6 release version runtime libraries. I guess I don't know for sure that the problem is related to CloneEntity. That is an extension method based on other code here related to cloning. It also does resetting as new, and I use MarkSavedEntitiesAsFetched = true.
I'm guessing the issue is that new_re's collection of DeletedEntries from the join table is null? Anyway, thanks for giving it a look.
//other Model changes
Model.Deleted = false;
//make a copy with all the updates
ReportEntryEntity new_re = Model.CloneEntity();
Model.CancelEdit(); //revert all changes
Model.Deleted = true;
Model.DeletingAnalyst = new_re.AnalystUserName;
Model.AnalysisRecordTimestamp = DateTime.Now;
using (DataAccessAdapter adapter = Create.Adapter())
{
s_ILog.Debug("Saving");
adapter.SaveEntity(Model);
adapter.SaveEntity(new_re);
BucketJoinEntity joiner = new BucketJoinEntity();
joiner.DeletedIntermediate = Model;
joiner.Replacement = new_re; //NullReference HERE
joiner.JoinReason = 0; //Manual
adapter.SaveEntity(joiner);
s_ILog.Debug("Saved");
}
This throws at the commented line. Here is the stacktrace.
at SD.LLBLGen.Pro.ORMSupportClasses.EntityFields2.get_Item(String name)
at SD.LLBLGen.Pro.ORMSupportClasses.EntityBase2.SyncFKFields(EntitySyncInfo1 syncInfo)
at SD.LLBLGen.Pro.ORMSupportClasses.EntityBase2.SetEntitySyncInformation(String fieldName, IEntity2 relatedEntity, IEntityRelation relation)
at SD.LLBLGen.Pro.ORMSupportClasses.EntityBase2.PerformSetupSyncRelatedEntity(IEntity2 relatedEntity, PropertyChangedEventHandler propertiesChangedHandler, String fieldName, IEntityRelation relation, Boolean connectToSaveEvent, String[] forfNames)
at Zetec.Analysis.EntityClasses.BucketJoinEntity.SetupSyncReplacement(IEntity2 relatedEntity)
at Zetec.Analysis.EntityClasses.BucketJoinEntity.SetRelatedEntity(IEntity2 relatedEntity, String fieldName)
at SD.LLBLGen.Pro.ORMSupportClasses.EntityCollectionBase2
1.PerformSetRelatedEntity(TEntity entity)
at SD.LLBLGen.Pro.ORMSupportClasses.CollectionCore1.PerformAdd(T item)
at SD.LLBLGen.Pro.ORMSupportClasses.CollectionCore
1.Add(T item)
at Zetec.Analysis.EntityClasses.ReportEntryEntity.SetRelatedEntity(IEntity2 relatedEntity, String fieldName)
at Zetec.Analysis.EntityClasses.BucketJoinEntity.set_Replacement(ReportEntryEntity value)
at ReportEditor.ViewModel.ReportEntryViewModel.FinishedEditing(Boolean save)
Here is a trimmed DDL
CREATE TABLE report_entries (
report_entry_id SERIAL PRIMARY KEY,
deleted boolean NOT NULL,
--snip
);
CREATE TABLE bucket_joins (
deleted_id integer NOT NULL,
report_entry_id integer NOT NULL,
join_reason integer NOT NULL,
PRIMARY KEY(deleted_id, report_entry_id)
);
ALTER TABLE bucket_joins ADD CONSTRAINT fk_report_join
FOREIGN KEY (report_entry_id) REFERENCES report_entries (report_entry_id) ON DELETE CASCADE
;
ALTER TABLE bucket_joins ADD CONSTRAINT fk_deleted_join
FOREIGN KEY (deleted_id) REFERENCES report_entries (report_entry_id) ON DELETE CASCADE
;