Delen via


Overzicht van projectverwijzingen

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Met projectverwijzingen in SQL-databaseprojecten kunt u afhankelijkheden maken tussen uw SQL-project en andere projecten. Er zijn twee primaire typen projectverwijzingen:

  • Databaseverwijzingen : afhankelijkheden tussen SQL-projecten of verwijzingen naar .dacpac bestanden en NuGet-pakketten die databaseobjectdefinities bieden.
  • .NET-projectverwijzingen: verwijzingen van .NET-projecten naar SQL-projecten voor scenario's zoals integratietests, implementatieautomatisering en het genereren van code.

Wanneer u begrijpt wanneer en hoe u elk type verwijzing gebruikt, kunt u uw werkstroom voor databaseontwikkeling effectief structuren.

Databaseverwijzingen

Met databaseverwijzingen kan een SQL-project objecten uit een ander SQL-project, een .dacpac bestand of een gepubliceerd NuGet-pakket opnemen. Deze verwijzingen worden gebruikt wanneer uw databaseobjecten afhankelijk zijn van objecten die elders zijn gedefinieerd, zoals tabellen in een gedeeld schema of systeemdatabaseobjecten.

Een basisdatabasereferentie naar een ander SQL-project in dezelfde oplossing ziet er als volgt uit:

<ItemGroup>
  <ProjectReference Include="..\Database1\Database1.sqlproj" />
</ItemGroup>

Databaseverwijzingen ondersteunen drie relatietypen:

  • Dezelfde database : objecten uit het project waarnaar wordt verwezen, worden onderdeel van hetzelfde databasemodel.
  • Verschillende database, dezelfde server : verwijzingsobjecten met behulp van driedelige naamgeving met een SQLCMD-variabele voor de databasenaam.
  • Verschillende database, verschillende server - Verwijzingsobjecten met behulp van vierdelige naamgeving met SQLCMD-variabelen voor zowel server- als databasenamen.

Zie het overzicht van databaseverwijzingen voor gedetailleerde informatie over het configureren van databaseverwijzingen, inclusief voorbeelden voor elk relatietype en richtlijnen voor het bouwen en publiceren van projecten met verwijzingen.

.NET-projectverwijzingen

.NET-projecten kunnen verwijzen naar SQL-projecten om databaseontwikkeling te integreren met toepassingscode. Dit referentietype is handig wanneer uw .NET-toepassing toegang nodig heeft tot de build-uitvoer van het SQL-project (het .dacpac bestand) voor test-, implementatie- of codegeneratiedoeleinden.

Gebruikssituaties

Veelvoorkomende scenario's voor het verwijzen naar een SQL-project vanuit een .NET-project zijn:

  • Integratietests : test projecten die het databaseschema implementeren in een testcontainer of lokaal exemplaar voordat tests worden uitgevoerd.
  • Automatisering van implementatie: consoletoepassingen of hulpprogramma's die programmatisch de .dacpac in doelomgevingen implementeren.
  • Modelcode genereren : toepassingen die code genereren op basis van het databaseschema dat is gedefinieerd in het SQL-project.

De projectreferentie configureren

Wanneer u een projectreferentie vanuit een .NET-project toevoegt aan een SQL-project, moet u het ReferenceOutputAssembly="false" kenmerk opnemen. Dit kenmerk vertelt het .NET-buildproces om het SQL-project te behandelen als een build-afhankelijkheid zonder ernaar te verwijzen als een .NET-assembly.

<ItemGroup>
  <ProjectReference Include="..\Database1\Database1.sqlproj" ReferenceOutputAssembly="false" />
</ItemGroup>

De ReferenceOutputAssembly="false" instelling is vereist omdat SQL-projecten een .dacpac bestand produceren als primaire uitvoer, niet als .NET-assembly. Zonder dit kenmerk probeert het .NET-buildproces de .dacpac als assembly te laden en mislukt het met een fout die vergelijkbaar is met:

error CS0009: Metadata file 'Database1.dacpac' could not be opened -- Unknown file format.

De DACPAC openen in uw .NET-project

Nadat u de projectreferentie hebt geconfigureerd, wordt het SQL-project gebouwd vóór uw .NET-project. Het .dacpac bestand is beschikbaar in de uitvoermap van het SQL-project (meestal bin/Debug of bin/Release).

Als u programmatisch toegang wilt krijgen tot de .dacpac .NET-code, verwijst u naar het bestandspad ten opzichte van uw projectstructuur. In een integratietest die bijvoorbeeld Testcontainers gebruikt om een SQL Server-exemplaar te maken:

// Path to the dacpac file built by the referenced SQL project
var dacpacPath = Path.Combine(
    Directory.GetCurrentDirectory(),
    "..", "..", "..", "..",
    "Database1", "bin", "Debug",
    "Database1.dacpac");

// Use DacFx to deploy the dacpac to your test database
var dacServices = new DacServices(connectionString);
using var dacpac = DacPackage.Load(dacpacPath);
dacServices.Deploy(dacpac, "TestDatabase");

De dacpac kopiëren naar de uitvoermap

Voor eenvoudigere toegang tot het bestand configureert u uw .NET-project om het tijdens de .dacpac build naar de uitvoermap te kopiëren. Voeg de volgende configuratie toe aan uw .csproj bestand:

<ItemGroup>
  <None Include="..\Database1\bin\$(Configuration)\Database1.dacpac"
        CopyToOutputDirectory="PreserveNewest"
        Link="Database1.dacpac" />
</ItemGroup>

Met deze configuratie wordt het .dacpac bestand gekopieerd naar de uitvoermap van uw .NET-project, zodat u ernaar kunt verwijzen met behulp van een eenvoudiger pad:

var dacpacPath = Path.Combine(
    AppContext.BaseDirectory,
    "Database1.dacpac");