   {:pre [(vector? entity-forms)]}
   (let [entity-symb               (symbol (format "%sEntity" (name entity)))
         internal-post-select-symb (symbol (format "internal-post-select-%s" (name entity)))
-        entity-map                (eval `(macrolet-entity-map ~entity ~@entity-forms))
+        unevaled-entity-map       (macroexpand-all `(macrolet-entity-map ~entity ~@entity-forms))
+        entity-map                (eval unevaled-entity-map)
         [methods specs]           (split-with list? methods+specs)]
     `(do
        (defrecord ~entity-symb []

                               (for [[method-name & impl] methods]
                                 {(keyword method-name) `(fn ~@impl)}))))
       (def ~entity
         (~(symbol (format "map->%sEntity" (name entity))) ~(assoc entity-map ::entity true))))))

(defn metabase-entity?
  "Is ENTITY a valid metabase model entity?"


(defn- identity-second [_ obj] obj)
(def ^:private constantly-nil (constantly nil))

(def ^:const ^:private default-entity-method-implementations
  {:pre-insert         #'identity-second
