Skip to content

Commit c7c7dfa

Browse files
committed
#300 Handle disabled foreign key constraints. Thanks to gbauer1.
1 parent c1bf85f commit c7c7dfa

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

EntityFramework.Reverse.POCO.Generator/EF.Reverse.POCO.Core.ttinclude

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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
18231824
FROM 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
19331935
FROM 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

Comments
 (0)