@@ -773,13 +773,28 @@ public static void SaveAllReferences<T>(this IDbCommand dbCmd, T instance)
773
773
{
774
774
var refType = fieldDef . FieldType ;
775
775
var refModelDef = refType . GetModelDefinition ( ) ;
776
- var refField = GetRefFieldDef ( modelDef , refModelDef , fieldDef . FieldType ) ;
776
+
777
+ var refSelf = GetSelfRefFieldDefIfExists ( modelDef , refModelDef ) ;
777
778
778
779
var result = fieldDef . GetValue ( instance ) ;
780
+ var refField = refSelf == null
781
+ ? GetRefFieldDef ( modelDef , refModelDef , refType )
782
+ : GetRefFieldDefIfExists ( modelDef , refModelDef ) ;
783
+
779
784
if ( result != null )
780
785
{
781
- refField . SetValueFn ( result , pkValue ) ;
786
+ if ( refField != null )
787
+ refField . SetValueFn ( result , pkValue ) ;
788
+
782
789
dbCmd . CreateTypedApi ( refType ) . Save ( result ) ;
790
+
791
+ //Save Self Table.RefTableId PK
792
+ if ( refSelf != null )
793
+ {
794
+ var refPkValue = refModelDef . PrimaryKey . GetValue ( result ) ;
795
+ refSelf . SetValueFn ( instance , refPkValue ) ;
796
+ dbCmd . Update ( instance ) ;
797
+ }
783
798
}
784
799
}
785
800
}
@@ -793,14 +808,30 @@ public static void SaveReferences<T, TRef>(this IDbCommand dbCmd, T instance, pa
793
808
var refType = typeof ( TRef ) ;
794
809
var refModelDef = ModelDefinition < TRef > . Definition ;
795
810
811
+ var refSelf = GetSelfRefFieldDefIfExists ( modelDef , refModelDef ) ;
812
+
796
813
foreach ( var oRef in refs )
797
814
{
798
- var refField = GetRefFieldDef ( modelDef , refModelDef , refType ) ;
815
+ var refField = refSelf == null
816
+ ? GetRefFieldDef ( modelDef , refModelDef , refType )
817
+ : GetRefFieldDefIfExists ( modelDef , refModelDef ) ;
799
818
800
- refField . SetValueFn ( oRef , pkValue ) ;
819
+ if ( refField != null )
820
+ refField . SetValueFn ( oRef , pkValue ) ;
801
821
}
802
822
803
823
dbCmd . SaveAll ( refs ) ;
824
+
825
+ foreach ( var oRef in refs )
826
+ {
827
+ //Save Self Table.RefTableId PK
828
+ if ( refSelf != null )
829
+ {
830
+ var refPkValue = refModelDef . PrimaryKey . GetValue ( oRef ) ;
831
+ refSelf . SetValueFn ( instance , refPkValue ) ;
832
+ dbCmd . Update ( instance ) ;
833
+ }
834
+ }
804
835
}
805
836
806
837
public static void LoadReferences < T > ( this IDbCommand dbCmd , T instance )
@@ -831,13 +862,28 @@ public static void LoadReferences<T>(this IDbCommand dbCmd, T instance)
831
862
{
832
863
var refType = fieldDef . FieldType ;
833
864
var refModelDef = refType . GetModelDefinition ( ) ;
834
- var refField = GetRefFieldDef ( modelDef , refModelDef , fieldDef . FieldType ) ;
835
865
836
- var sqlFilter = ormLiteDialectProvider . GetQuotedColumnName ( refField . FieldName ) + "={0}" ;
837
- var sql = ormLiteDialectProvider . ToSelectStatement ( refType , sqlFilter , pkValue ) ;
866
+ var refSelf = GetSelfRefFieldDefIfExists ( modelDef , refModelDef ) ;
867
+ var refField = refSelf == null
868
+ ? GetRefFieldDef ( modelDef , refModelDef , refType )
869
+ : GetRefFieldDefIfExists ( modelDef , refModelDef ) ;
838
870
839
- var result = dbCmd . ConvertTo ( refType , sql ) ;
840
- fieldDef . SetValueFn ( instance , result ) ;
871
+ if ( refField != null )
872
+ {
873
+ var sqlFilter = ormLiteDialectProvider . GetQuotedColumnName ( refField . FieldName ) + "={0}" ;
874
+ var sql = ormLiteDialectProvider . ToSelectStatement ( refType , sqlFilter , pkValue ) ;
875
+ var result = dbCmd . ConvertTo ( refType , sql ) ;
876
+ fieldDef . SetValueFn ( instance , result ) ;
877
+ }
878
+ else if ( refSelf != null )
879
+ {
880
+ //Load Self Table.RefTableId PK
881
+ var refPkValue = refSelf . GetValue ( instance ) ;
882
+ var sqlFilter = ormLiteDialectProvider . GetQuotedColumnName ( refModelDef . PrimaryKey . FieldName ) + "={0}" ;
883
+ var sql = ormLiteDialectProvider . ToSelectStatement ( refType , sqlFilter , refPkValue ) ;
884
+ var result = dbCmd . ConvertTo ( refType , sql ) ;
885
+ fieldDef . SetValueFn ( instance , result ) ;
886
+ }
841
887
}
842
888
}
843
889
}
@@ -852,10 +898,17 @@ public static FieldDefinition GetRefFieldDef(ModelDefinition modelDef, ModelDefi
852
898
853
899
public static FieldDefinition GetRefFieldDefIfExists ( ModelDefinition modelDef , ModelDefinition refModelDef )
854
900
{
855
- var refNameConvention = modelDef . ModelName + "Id" ;
856
- var refField = refModelDef . FieldDefinitions . FirstOrDefault ( x => x . FieldName == refNameConvention )
901
+ var refField = refModelDef . FieldDefinitions . FirstOrDefault ( x => x . FieldName == modelDef . ModelName + "Id" )
857
902
?? refModelDef . FieldDefinitions . FirstOrDefault ( x => x . Name == modelDef . Name + "Id" ) ;
858
903
return refField ;
859
904
}
905
+
906
+ public static FieldDefinition GetSelfRefFieldDefIfExists ( ModelDefinition modelDef , ModelDefinition refModelDef )
907
+ {
908
+ var refField = modelDef . FieldDefinitions . FirstOrDefault ( x => x . FieldName == refModelDef . ModelName + "Id" )
909
+ ?? modelDef . FieldDefinitions . FirstOrDefault ( x => x . Name == refModelDef . Name + "Id" ) ;
910
+
911
+ return refField ;
912
+ }
860
913
}
861
914
}
0 commit comments