private static bool CanAcceptModelClassAsSource(ModelClass candidate) { // valid unidirectional associations: // EF6 - entity to entity, entity to dependent // EFCore - entity to entity, entity to dependent // EFCore5Plus - entity to entity, entity to dependent, dependent to dependent, keyless to entity ModelRoot modelRoot = candidate.ModelRoot; EFVersion entityFrameworkVersion = modelRoot.EntityFrameworkVersion; if (entityFrameworkVersion == EFVersion.EF6) { if (candidate.IsEntity()) { return(true); } } else if (entityFrameworkVersion == EFVersion.EFCore && !modelRoot.IsEFCore5Plus) { if (candidate.IsEntity()) { return(true); } } else if (entityFrameworkVersion == EFVersion.EFCore && modelRoot.IsEFCore5Plus) { if (candidate.IsEntity()) { return(true); } if (candidate.IsDependent()) { return(true); } if (candidate.IsKeyless()) { return(true); } } return(false); }
private static bool CanAcceptModelClassAndModelClassAsSourceAndTarget(ModelClass sourceModelClass, ModelClass targetModelClass) { // keyless types may not have navigations to owned entities if (sourceModelClass.IsKeyless() && targetModelClass.IsDependent()) { return(false); } // navigation properties can't point to keyless entity types if (targetModelClass.IsKeyless()) { return(false); } // valid unidirectional associations: // EF6 - entity to entity, entity to dependent // EFCore - entity to entity, entity to dependent // EFCore5Plus - entity to entity, entity to dependent, dependent to dependent, keyless to entity ModelRoot modelRoot = sourceModelClass.ModelRoot; if (modelRoot.EntityFrameworkVersion == EFVersion.EF6) { if (sourceModelClass.IsEntity() && targetModelClass.IsEntity()) { return(true); } if (sourceModelClass.IsEntity() && targetModelClass.IsDependent()) { return(true); } } else if (modelRoot.EntityFrameworkVersion == EFVersion.EFCore && !modelRoot.IsEFCore5Plus) { if (sourceModelClass.IsEntity() && targetModelClass.IsEntity()) { return(true); } if (sourceModelClass.IsEntity() && targetModelClass.IsDependent()) { return(true); } } else if (modelRoot.EntityFrameworkVersion == EFVersion.EFCore && modelRoot.IsEFCore5Plus) { if (sourceModelClass.IsEntity() && targetModelClass.IsEntity()) { return(true); } if (sourceModelClass.IsEntity() && targetModelClass.IsDependent()) { return(true); } if (sourceModelClass.IsDependent() && targetModelClass.IsDependent()) { return(true); } if (sourceModelClass.IsKeyless() && targetModelClass.IsEntity()) { return(true); } } return(false); }