diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,11 @@
 # Changelog for persistent
 
+## 2.14.4.4
+
+* [#1460] https://github.com/yesodweb/persistent/pull/1460
+    * Fix a problem where a `Primary` key causes `mkPersist` to generate code
+      that doesn't compile under `NoFieldSelectors`
+
 ## 2.14.4.3
 
 * [#1452](https://github.com/yesodweb/persistent/pull/1452)
diff --git a/Database/Persist/TH.hs b/Database/Persist/TH.hs
--- a/Database/Persist/TH.hs
+++ b/Database/Persist/TH.hs
@@ -20,6 +20,11 @@
 
 -- | This module provides the tools for defining your database schema and using
 -- it to generate Haskell data types and migrations.
+--
+-- For documentation on the domain specific language used for defining database
+-- models, see "Database.Persist.Quasi".
+--
+--
 module Database.Persist.TH
     ( -- * Parse entity defs
       persistWith
@@ -30,7 +35,11 @@
       -- * Turn @EntityDef@s into types
     , mkPersist
     , mkPersistWith
+      -- ** Configuring Entity Definition
     , MkPersistSettings
+    , mkPersistSettings
+    , sqlSettings
+    -- *** Record Fields (for update/viewing settings)
     , mpsBackend
     , mpsGeneric
     , mpsPrefixFields
@@ -41,8 +50,6 @@
     , mpsDeriveInstances
     , mpsCamelCaseCompositeKeySelector
     , EntityJSON(..)
-    , mkPersistSettings
-    , sqlSettings
     -- ** Implicit ID Columns
     , ImplicitIdDef
     , setImplicitIdDef
@@ -1840,8 +1847,10 @@
         ListE <$> mapM (f recName) (toList $ unboundCompositeCols ucd)
     f recName fieldNameHS =
         [|
-        toPersistValue ($(varE $ keyFieldName mps entDef fieldNameHS) $(varE recName))
+        toPersistValue ($(pure $ keyFieldSel fieldNameHS) $(varE recName))
         |]
+    keyFieldSel name
+        = fieldSel (keyConName entDef) (keyFieldName mps entDef name)
 
 normalClause :: [Pat] -> Exp -> Clause
 normalClause p e = Clause p (NormalB e) []
@@ -1985,7 +1994,6 @@
     [keyFromRecordM'] <-
         case unboundPrimarySpec entDef of
             NaturalKey ucd -> do
-                recordVarName <- newName "record"
                 let
                     keyCon =
                         keyConName entDef
@@ -1995,15 +2003,11 @@
                         foldl'
                             AppE
                             (ConE keyCon)
-                            (toList $ fmap
-                                (\n ->
-                                    VarE n `AppE` VarE recordVarName
-                                )
-                                keyFields'
-                            )
+                            (VarE <$> keyFields')
                     keyFromRec = varP 'keyFromRecordM
+                    lam = LamE [RecP name [(n, VarP n) | n <- toList keyFields']] constr
                 [d|
-                    $(keyFromRec) = Just ( \ $(varP recordVarName) -> $(pure constr))
+                    $(keyFromRec) = Just $(pure lam)
                     |]
 
             _ ->
diff --git a/persistent.cabal b/persistent.cabal
--- a/persistent.cabal
+++ b/persistent.cabal
@@ -1,5 +1,5 @@
 name:            persistent
-version:         2.14.4.3
+version:         2.14.4.4
 license:         MIT
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
diff --git a/test/Database/Persist/TH/NoFieldSelectorsSpec.hs b/test/Database/Persist/TH/NoFieldSelectorsSpec.hs
--- a/test/Database/Persist/TH/NoFieldSelectorsSpec.hs
+++ b/test/Database/Persist/TH/NoFieldSelectorsSpec.hs
@@ -21,7 +21,10 @@
 
 mkPersist sqlSettings {mpsFieldLabelModifier = const id} [persistLowerCase|
 User
+    ident Text
     name Text
+    Primary ident
+    team TeamId
 
 Team
     name Text
