@@ -1819,7 +1819,8 @@ SELECT FK.name AS FK_Table,
18191819 SCHEMA_NAME(PK.schema_id) AS pkSchema,
18201820 PkCol.name AS primarykey,
18211821 k.constraint_column_id AS ORDINAL_POSITION,
1822- CASE WHEN f.delete_referential_action = 1 THEN 1 ELSE 0 END as CascadeOnDelete
1822+ CASE WHEN f.delete_referential_action = 1 THEN 1 ELSE 0 END as CascadeOnDelete,
1823+ f.is_disabled AS IsNotEnforced
18231824FROM sys.objects AS PK
18241825 INNER JOIN sys.foreign_keys AS f
18251826 INNER JOIN sys.foreign_key_columns AS k
@@ -1929,7 +1930,8 @@ SELECT DISTINCT
19291930 '' AS pkSchema,
19301931 PT.COLUMN_NAME AS primarykey,
19311932 FK.ORDINAL_POSITION,
1932- CASE WHEN C.DELETE_RULE = 'CASCADE' THEN 1 ELSE 0 END AS CascadeOnDelete
1933+ CASE WHEN C.DELETE_RULE = 'CASCADE' THEN 1 ELSE 0 END AS CascadeOnDelete,
1934+ CAST(0 AS BIT) AS IsNotEnforced
19331935FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS C
19341936 INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS FK
19351937 ON FK.CONSTRAINT_NAME = C.CONSTRAINT_NAME
@@ -2281,12 +2283,13 @@ SELECT SERVERPROPERTY('Edition') AS Edition,
22812283 string constraintName = rdr["Constraint_Name"].ToString();
22822284 int ordinal = (int) rdr["ORDINAL_POSITION"];
22832285 bool cascadeOnDelete = ((int) rdr["CascadeOnDelete"]) == 1;
2286+ bool isNotEnforced = (bool) rdr["IsNotEnforced"];
22842287
22852288 string fkTableNameFiltered = tableRename(fkTableName, fkSchema, false);
22862289 string pkTableNameFiltered = tableRename(pkTableName, pkSchema, false);
22872290
22882291 var fk = new ForeignKey(fkTableName, fkSchema, pkTableName, pkSchema, fkColumn, pkColumn,
2289- constraintName, fkTableNameFiltered, pkTableNameFiltered, ordinal, cascadeOnDelete);
2292+ constraintName, fkTableNameFiltered, pkTableNameFiltered, ordinal, cascadeOnDelete, isNotEnforced );
22902293
22912294 var filteredFk = foreignKeyFilter(fk);
22922295 if(filteredFk != null)
@@ -2683,7 +2686,7 @@ SELECT SERVERPROPERTY('Edition') AS Edition,
26832686
26842687 if (!dataAnnotationsSchema)
26852688 {
2686- fkCol.col.ConfigFk.Add(string.Format("{0};{1}", GetRelationship(relationship, fkCol.col, pkCol, pkPropName, fkPropName, manyToManyMapping, mapKey, foreignKey.CascadeOnDelete, foreignKey.IncludeReverseNavigation),
2689+ fkCol.col.ConfigFk.Add(string.Format("{0};{1}", GetRelationship(relationship, fkCol.col, pkCol, pkPropName, fkPropName, manyToManyMapping, mapKey, foreignKey.CascadeOnDelete, foreignKey.IncludeReverseNavigation, foreignKey.IsNotEnforced ),
26872690 includeComments != CommentsStyle.None ? " // " + foreignKey.ConstraintName : string.Empty));
26882691 }
26892692
@@ -2716,10 +2719,10 @@ SELECT SERVERPROPERTY('Edition') AS Edition,
27162719 }
27172720 }
27182721
2719- public static string GetRelationship(Relationship relationship, Column fkCol, Column pkCol, string pkPropName, string fkPropName, string manyToManyMapping, string mapKey, bool cascadeOnDelete, bool includeReverseNavigation)
2722+ private static string GetRelationship(Relationship relationship, Column fkCol, Column pkCol, string pkPropName, string fkPropName, string manyToManyMapping, string mapKey, bool cascadeOnDelete, bool includeReverseNavigation, bool isNotEnforced )
27202723 {
27212724 return string.Format("Has{0}(a => a.{1}){2}{3}",
2722- GetHasMethod(relationship, fkCol, pkCol),
2725+ GetHasMethod(relationship, fkCol, pkCol, isNotEnforced ),
27232726 pkPropName,
27242727 GetWithMethod(relationship, fkCol, fkPropName, manyToManyMapping, mapKey, includeReverseNavigation),
27252728 cascadeOnDelete ? string.Empty: ".WillCascadeOnDelete(false)");
@@ -2728,7 +2731,7 @@ SELECT SERVERPROPERTY('Edition') AS Edition,
27282731 // HasOptional
27292732 // HasRequired
27302733 // HasMany
2731- private static string GetHasMethod(Relationship relationship, Column fkCol, Column pkCol)
2734+ private static string GetHasMethod(Relationship relationship, Column fkCol, Column pkCol, bool isNotEnforced )
27322735 {
27332736 bool withMany = false;
27342737 switch (relationship)
@@ -2740,7 +2743,7 @@ SELECT SERVERPROPERTY('Edition') AS Edition,
27402743 }
27412744
27422745 if (withMany || pkCol.IsPrimaryKey)
2743- return fkCol.IsNullable ? "Optional" : "Required";
2746+ return fkCol.IsNullable || isNotEnforced ? "Optional" : "Required";
27442747
27452748 return "Many";
27462749 }
@@ -3085,12 +3088,13 @@ SELECT SERVERPROPERTY('Edition') AS Edition,
30853088 public string ConstraintName { get; private set; }
30863089 public int Ordinal { get; private set; }
30873090 public bool CascadeOnDelete { get; private set; }
3091+ public bool IsNotEnforced { get; private set; }
30883092
30893093 // User settable via ForeignKeyFilter callback
30903094 public bool IncludeReverseNavigation { get; set; }
30913095 public bool IncludeRequiredAttribute { get; set; }
30923096
3093- public ForeignKey(string fkTableName, string fkSchema, string pkTableName, string pkSchema, string fkColumn, string pkColumn, string constraintName, string fkTableNameFiltered, string pkTableNameFiltered, int ordinal, bool cascadeOnDelete)
3097+ public ForeignKey(string fkTableName, string fkSchema, string pkTableName, string pkSchema, string fkColumn, string pkColumn, string constraintName, string fkTableNameFiltered, string pkTableNameFiltered, int ordinal, bool cascadeOnDelete, bool isNotEnforced )
30943098 {
30953099 ConstraintName = constraintName;
30963100 PkColumn = pkColumn;
@@ -3103,6 +3107,7 @@ SELECT SERVERPROPERTY('Edition') AS Edition,
31033107 PkTableNameFiltered = pkTableNameFiltered;
31043108 Ordinal = ordinal;
31053109 CascadeOnDelete = cascadeOnDelete;
3110+ IsNotEnforced = isNotEnforced;
31063111
31073112 IncludeReverseNavigation = true;
31083113 }
0 commit comments