Skip to content

Core

Version 5.9.0

Added

  • RESTRICT is a referential action in its own right. ReferentialAction.Restrict is parsed, written and rendered.
  • SqlDialect.SupportsRestrict says whether the engine has RESTRICT as distinct from NO ACTION. Providers have to opt in.
  • A generated column records whether it is stored. Column.IsStored and the NSQL STORED / VIRTUAL keywords.
  • SqlDialect.SupportsVirtualGeneratedColumns says whether the engine can leave one unstored. Off by default, matching Postgres, which stores every generated column.
  • virtual-generated-column-not-supported is a warning: a virtual generated column declared against an engine that always stores.
  • A column records whether it is the table’s row identifier for merge replication. Column.IsRowGuid and the NSQL ROWGUIDCOL keyword.
  • A column default can carry its constraint’s name. Column.DefaultConstraintName and the NSQL CONSTRAINT <name> DEFAULT <expr> form, for engines that make a default a named constraint.
  • An identity and a trigger can stand aside for a replication agent. IdentityOptions.NotForReplication, Trigger.IsNotForReplication, and the NSQL NOT FOR REPLICATION form on both.
  • DiagnosticSources declares every source the engine reports under, and DiagnosticSources.All offers them to a caller checking a configured name against the sources that exist.

Changed

  • Diagnostic sources and codes are a configuration contract, so this release settles their naming before the next CLI makes them addressable from .editorconfig.

Fixed

  • Trigger.Clone(), Equals and GetHashCode cover every field, as Column’s now do. Both enumerate fields by hand, and import clones every object on its way to a file.