📝 doc updated
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
4aa9453671
commit
bd70aaf12b
@ -1,6 +1,6 @@
|
||||
export default [
|
||||
require('/Users/marcchevaldonne/Documents/temp/mchsamples-.net-core/Documentation/docusaurus/node_modules/infima/dist/css/default/default.css'),
|
||||
require('/Users/marcchevaldonne/Documents/temp/mchsamples-.net-core/Documentation/docusaurus/node_modules/@docusaurus/theme-classic/lib/prism-include-languages'),
|
||||
require('/Users/marcchevaldonne/Documents/temp/mchsamples-.net-core/Documentation/docusaurus/node_modules/@docusaurus/theme-classic/lib/nprogress'),
|
||||
require('/Users/marcchevaldonne/Documents/temp/mchsamples-.net-core/Documentation/docusaurus/src/css/custom.css'),
|
||||
require('/Users/marcchevaldonne/Documents/temp/demos2022/mchsamples-.net-core/Documentation/docusaurus/node_modules/infima/dist/css/default/default.css'),
|
||||
require('/Users/marcchevaldonne/Documents/temp/demos2022/mchsamples-.net-core/Documentation/docusaurus/node_modules/@docusaurus/theme-classic/lib/prism-include-languages'),
|
||||
require('/Users/marcchevaldonne/Documents/temp/demos2022/mchsamples-.net-core/Documentation/docusaurus/node_modules/@docusaurus/theme-classic/lib/nprogress'),
|
||||
require('/Users/marcchevaldonne/Documents/temp/demos2022/mchsamples-.net-core/Documentation/docusaurus/src/css/custom.css'),
|
||||
];
|
||||
|
@ -0,0 +1,29 @@
|
||||
{
|
||||
"unversionedId": "Entity-Framework/Model/EF_CF_KeysConvention",
|
||||
"id": "Entity-Framework/Model/EF_CF_KeysConvention",
|
||||
"title": "Keys conventions",
|
||||
"description": "explique comment créer les clés primaires d'une entité lorsqu'on utilise les conventions d'écriture",
|
||||
"source": "@site/docs/Entity-Framework/Model/EF_CF_KeysConvention.md",
|
||||
"sourceDirName": "Entity-Framework/Model",
|
||||
"slug": "/Entity-Framework/Model/EF_CF_KeysConvention",
|
||||
"permalink": "/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/docs/Entity-Framework/Model/EF_CF_KeysConvention",
|
||||
"draft": false,
|
||||
"editUrl": "https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/Entity-Framework/Model/EF_CF_KeysConvention.md",
|
||||
"tags": [],
|
||||
"version": "current",
|
||||
"sidebarPosition": 4,
|
||||
"frontMatter": {
|
||||
"sidebar_label": "2.4. Keys convention (Entity Framework Code First)",
|
||||
"sidebar_position": 4,
|
||||
"description": "explique comment créer les clés primaires d'une entité lorsqu'on utilise les conventions d'écriture"
|
||||
},
|
||||
"sidebar": "tutorialSidebar",
|
||||
"previous": {
|
||||
"title": "2.3. Fluent API (Entity Framework Code First)",
|
||||
"permalink": "/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/docs/Entity-Framework/Model/EF_CF_FluentAPI"
|
||||
},
|
||||
"next": {
|
||||
"title": "2.5. Keys data annotations (Entity Framework Code First)",
|
||||
"permalink": "/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/docs/Entity-Framework/Model/EF_CF_KeysDataAnnotations"
|
||||
}
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
{
|
||||
"unversionedId": "Entity-Framework/Model/EF_CF_KeysDataAnnotations",
|
||||
"id": "Entity-Framework/Model/EF_CF_KeysDataAnnotations",
|
||||
"title": "Keys data annotations_",
|
||||
"description": "explique comment créer les clés primaires d'une entité lorsqu'on utilise les *data annotations",
|
||||
"source": "@site/docs/Entity-Framework/Model/EF_CF_KeysDataAnnotations.md",
|
||||
"sourceDirName": "Entity-Framework/Model",
|
||||
"slug": "/Entity-Framework/Model/EF_CF_KeysDataAnnotations",
|
||||
"permalink": "/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/docs/Entity-Framework/Model/EF_CF_KeysDataAnnotations",
|
||||
"draft": false,
|
||||
"editUrl": "https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/Entity-Framework/Model/EF_CF_KeysDataAnnotations.md",
|
||||
"tags": [],
|
||||
"version": "current",
|
||||
"sidebarPosition": 5,
|
||||
"frontMatter": {
|
||||
"sidebar_label": "2.5. Keys data annotations (Entity Framework Code First)",
|
||||
"sidebar_position": 5,
|
||||
"description": "explique comment créer les clés primaires d'une entité lorsqu'on utilise les *data annotations"
|
||||
},
|
||||
"sidebar": "tutorialSidebar",
|
||||
"previous": {
|
||||
"title": "2.4. Keys convention (Entity Framework Code First)",
|
||||
"permalink": "/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/docs/Entity-Framework/Model/EF_CF_KeysConvention"
|
||||
}
|
||||
}
|
@ -1,170 +1,178 @@
|
||||
{
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/__docusaurus/debug-52a": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/__docusaurus/debug-253": {
|
||||
"__comp": "__comp---theme-debug-config-23-a-2ff",
|
||||
"__context": {
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-c-sharp-samples-docusaurus-debugc-70-415"
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-mchsamples-net-core-docusaurus-debugdff-b54"
|
||||
}
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/__docusaurus/debug/config-f7e": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/__docusaurus/debug/config-85f": {
|
||||
"__comp": "__comp---theme-debug-config-23-a-2ff",
|
||||
"__context": {
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-c-sharp-samples-docusaurus-debugc-70-415"
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-mchsamples-net-core-docusaurus-debugdff-b54"
|
||||
}
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/__docusaurus/debug/content-1c1": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/__docusaurus/debug/content-ae4": {
|
||||
"__comp": "__comp---theme-debug-contentba-8-ce7",
|
||||
"__context": {
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-c-sharp-samples-docusaurus-debugc-70-415"
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-mchsamples-net-core-docusaurus-debugdff-b54"
|
||||
},
|
||||
"allContent": "allContent---documentation-mch-samples-net-docusaurus-c-sharp-samples-docusaurus-debug-content-246-068"
|
||||
"allContent": "allContent---documentation-mch-samples-net-docusaurus-mchsamples-net-core-docusaurus-debug-content-246-33c"
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/__docusaurus/debug/globalData-1c7": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/__docusaurus/debug/globalData-0fd": {
|
||||
"__comp": "__comp---theme-debug-global-dataede-0fa",
|
||||
"__context": {
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-c-sharp-samples-docusaurus-debugc-70-415"
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-mchsamples-net-core-docusaurus-debugdff-b54"
|
||||
}
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/__docusaurus/debug/metadata-c54": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/__docusaurus/debug/metadata-00a": {
|
||||
"__comp": "__comp---theme-debug-site-metadata-68-e-3d4",
|
||||
"__context": {
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-c-sharp-samples-docusaurus-debugc-70-415"
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-mchsamples-net-core-docusaurus-debugdff-b54"
|
||||
}
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/__docusaurus/debug/registry-ccf": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/__docusaurus/debug/registry-c92": {
|
||||
"__comp": "__comp---theme-debug-registry-679-501",
|
||||
"__context": {
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-c-sharp-samples-docusaurus-debugc-70-415"
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-mchsamples-net-core-docusaurus-debugdff-b54"
|
||||
}
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/__docusaurus/debug/routes-fa1": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/__docusaurus/debug/routes-d2f": {
|
||||
"__comp": "__comp---theme-debug-routes-946-699",
|
||||
"__context": {
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-c-sharp-samples-docusaurus-debugc-70-415"
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-mchsamples-net-core-docusaurus-debugdff-b54"
|
||||
}
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/blog-8ba": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/blog-b24": {
|
||||
"__comp": "__comp---theme-blog-list-pagea-6-a-7ba",
|
||||
"__context": {
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-c-sharp-samples-blog-9-f-1-4bc"
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-mchsamples-net-core-blogf-91-577"
|
||||
},
|
||||
"sidebar": "sidebar---documentation-mch-samples-net-docusaurus-c-sharp-samples-blog-814-acb",
|
||||
"sidebar": "sidebar---documentation-mch-samples-net-docusaurus-mchsamples-net-core-blog-814-595",
|
||||
"items": [
|
||||
{
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-c-sharp-samples-blog-17-d-b14"
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-mchsamples-net-core-blog-17-d-15d"
|
||||
}
|
||||
],
|
||||
"metadata": "metadata---documentation-mch-samples-net-docusaurus-c-sharp-samples-blog-84-b-8f1"
|
||||
"metadata": "metadata---documentation-mch-samples-net-docusaurus-mchsamples-net-core-blogec-0-3e2"
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/blog/archive-866": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/blog/archive-a3f": {
|
||||
"__comp": "__comp---theme-blog-archive-page-9-e-4-1d8",
|
||||
"__context": {
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-c-sharp-samples-blog-9-f-1-4bc"
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-mchsamples-net-core-blogf-91-577"
|
||||
},
|
||||
"archive": "archive---documentation-mch-samples-net-docusaurus-c-sharp-samples-blog-archivea-8-c-e36"
|
||||
"archive": "archive---documentation-mch-samples-net-docusaurus-mchsamples-net-core-blog-archivea-5-b-f21"
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/blog/first-blog-post-336": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/blog/first-blog-post-52c": {
|
||||
"__comp": "__comp---theme-blog-post-pageccc-cab",
|
||||
"__context": {
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-c-sharp-samples-blog-9-f-1-4bc"
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-mchsamples-net-core-blogf-91-577"
|
||||
},
|
||||
"sidebar": "sidebar---documentation-mch-samples-net-docusaurus-c-sharp-samples-blog-814-acb",
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-c-sharp-samples-blog-first-blog-post-47-a-8f8"
|
||||
"sidebar": "sidebar---documentation-mch-samples-net-docusaurus-mchsamples-net-core-blog-814-595",
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-mchsamples-net-core-blog-first-blog-post-47-a-5e0"
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/blog/tags-cb4": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/blog/tags-9e2": {
|
||||
"__comp": "__comp---theme-blog-tags-list-page-01-a-d0b",
|
||||
"__context": {
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-c-sharp-samples-blog-9-f-1-4bc"
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-mchsamples-net-core-blogf-91-577"
|
||||
},
|
||||
"sidebar": "sidebar---documentation-mch-samples-net-docusaurus-c-sharp-samples-blog-814-acb",
|
||||
"tags": "tags---documentation-mch-samples-net-docusaurus-c-sharp-samples-blog-tags-020-d22"
|
||||
"sidebar": "sidebar---documentation-mch-samples-net-docusaurus-mchsamples-net-core-blog-814-595",
|
||||
"tags": "tags---documentation-mch-samples-net-docusaurus-mchsamples-net-core-blog-tags-5-e-4-5f5"
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/blog/tags/docusaurus-67c": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/blog/tags/docusaurus-e93": {
|
||||
"__comp": "__comp---theme-blog-tags-posts-page-687-b6c",
|
||||
"__context": {
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-c-sharp-samples-blog-9-f-1-4bc"
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-mchsamples-net-core-blogf-91-577"
|
||||
},
|
||||
"sidebar": "sidebar---documentation-mch-samples-net-docusaurus-c-sharp-samples-blog-814-acb",
|
||||
"sidebar": "sidebar---documentation-mch-samples-net-docusaurus-mchsamples-net-core-blog-814-595",
|
||||
"items": [
|
||||
{
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-c-sharp-samples-blog-17-d-b14"
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-mchsamples-net-core-blog-17-d-15d"
|
||||
}
|
||||
],
|
||||
"tag": "tag---documentation-mch-samples-net-docusaurus-c-sharp-samples-blog-tags-docusaurusca-7-50c",
|
||||
"listMetadata": "listMetadata---documentation-mch-samples-net-docusaurus-c-sharp-samples-blog-tags-docusaurus-120-69b"
|
||||
"tag": "tag---documentation-mch-samples-net-docusaurus-mchsamples-net-core-blog-tags-docusaurus-888-781",
|
||||
"listMetadata": "listMetadata---documentation-mch-samples-net-docusaurus-mchsamples-net-core-blog-tags-docusaurusd-58-591"
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/blog/tags/welcome-e57": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/blog/tags/welcome-8f9": {
|
||||
"__comp": "__comp---theme-blog-tags-posts-page-687-b6c",
|
||||
"__context": {
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-c-sharp-samples-blog-9-f-1-4bc"
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-mchsamples-net-core-blogf-91-577"
|
||||
},
|
||||
"sidebar": "sidebar---documentation-mch-samples-net-docusaurus-c-sharp-samples-blog-814-acb",
|
||||
"sidebar": "sidebar---documentation-mch-samples-net-docusaurus-mchsamples-net-core-blog-814-595",
|
||||
"items": [
|
||||
{
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-c-sharp-samples-blog-17-d-b14"
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-mchsamples-net-core-blog-17-d-15d"
|
||||
}
|
||||
],
|
||||
"tag": "tag---documentation-mch-samples-net-docusaurus-c-sharp-samples-blog-tags-welcomeaf-2-8d3",
|
||||
"listMetadata": "listMetadata---documentation-mch-samples-net-docusaurus-c-sharp-samples-blog-tags-welcome-53-a-9a0"
|
||||
"tag": "tag---documentation-mch-samples-net-docusaurus-mchsamples-net-core-blog-tags-welcomeb-2-a-a00",
|
||||
"listMetadata": "listMetadata---documentation-mch-samples-net-docusaurus-mchsamples-net-core-blog-tags-welcome-47-f-c8e"
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/markdown-page-3d2": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/markdown-page-ec8": {
|
||||
"__comp": "__comp---theme-mdx-page-1-f-3-b90",
|
||||
"__context": {
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-c-sharp-samples-markdown-pagef-9-b-493"
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-mchsamples-net-core-markdown-pagee-05-e1f"
|
||||
},
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-c-sharp-samples-markdown-page-393-12f"
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-mchsamples-net-core-markdown-page-393-a13"
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/docs-5fa": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/docs-db2": {
|
||||
"__comp": "__comp---theme-doc-page-1-be-9be",
|
||||
"__context": {
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-c-sharp-samples-docsae-6-fb6"
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-mchsamples-net-core-docsd-1-c-d2b"
|
||||
},
|
||||
"versionMetadata": "versionMetadata---documentation-mch-samples-net-docusaurus-c-sharp-samples-docs-935-90f"
|
||||
"versionMetadata": "versionMetadata---documentation-mch-samples-net-docusaurus-mchsamples-net-core-docs-935-0e7"
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/docs/category/1-fundamentals-df6": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/docs/category/1-fundamentals-e1c": {
|
||||
"__comp": "__comp---theme-doc-category-generated-index-page-14-e-640",
|
||||
"categoryGeneratedIndex": "categoryGeneratedIndex---documentation-mch-samples-net-docusaurus-c-sharp-samples-docs-category-1-fundamentals-86-b-b91"
|
||||
"categoryGeneratedIndex": "categoryGeneratedIndex---documentation-mch-samples-net-docusaurus-mchsamples-net-core-docs-category-1-fundamentalsc-1-a-a56"
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/docs/category/2-model-383": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/docs/category/2-model-2a7": {
|
||||
"__comp": "__comp---theme-doc-category-generated-index-page-14-e-640",
|
||||
"categoryGeneratedIndex": "categoryGeneratedIndex---documentation-mch-samples-net-docusaurus-c-sharp-samples-docs-category-2-model-1-c-0-59c"
|
||||
"categoryGeneratedIndex": "categoryGeneratedIndex---documentation-mch-samples-net-docusaurus-mchsamples-net-core-docs-category-2-model-82-e-ada"
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/docs/category/entity-framework-core-c22": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/docs/category/entity-framework-core-300": {
|
||||
"__comp": "__comp---theme-doc-category-generated-index-page-14-e-640",
|
||||
"categoryGeneratedIndex": "categoryGeneratedIndex---documentation-mch-samples-net-docusaurus-c-sharp-samples-docs-category-entity-framework-core-0-b-5-35d"
|
||||
"categoryGeneratedIndex": "categoryGeneratedIndex---documentation-mch-samples-net-docusaurus-mchsamples-net-core-docs-category-entity-framework-core-8-e-1-b0d"
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/docs/Entity-Framework/Fundamentals/ConnectionStrings-23e": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/docs/Entity-Framework/Fundamentals/ConnectionStrings-870": {
|
||||
"__comp": "__comp---theme-doc-item-178-a40",
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-c-sharp-samples-docs-entity-framework-fundamentals-connection-strings-723-599"
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-mchsamples-net-core-docs-entity-framework-fundamentals-connection-strings-723-aa9"
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/docs/Entity-Framework/Fundamentals/TestingInMemory-c54": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/docs/Entity-Framework/Fundamentals/TestingInMemory-240": {
|
||||
"__comp": "__comp---theme-doc-item-178-a40",
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-c-sharp-samples-docs-entity-framework-fundamentals-testing-in-memory-614-5f7"
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-mchsamples-net-core-docs-entity-framework-fundamentals-testing-in-memory-614-b2e"
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/docs/Entity-Framework/intro-810": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/docs/Entity-Framework/intro-700": {
|
||||
"__comp": "__comp---theme-doc-item-178-a40",
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-c-sharp-samples-docs-entity-framework-intro-553-256"
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-mchsamples-net-core-docs-entity-framework-intro-553-232"
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/docs/Entity-Framework/Model/EF_CF_dataAnnotations-f30": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/docs/Entity-Framework/Model/EF_CF_dataAnnotations-416": {
|
||||
"__comp": "__comp---theme-doc-item-178-a40",
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-c-sharp-samples-docs-entity-framework-model-ef-cf-data-annotations-1-a-4-477"
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-mchsamples-net-core-docs-entity-framework-model-ef-cf-data-annotations-1-a-4-d1f"
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/docs/Entity-Framework/Model/EF_CF_FluentAPI-f88": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/docs/Entity-Framework/Model/EF_CF_FluentAPI-4c2": {
|
||||
"__comp": "__comp---theme-doc-item-178-a40",
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-c-sharp-samples-docs-entity-framework-model-ef-cf-fluent-api-5-ee-ffe"
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-mchsamples-net-core-docs-entity-framework-model-ef-cf-fluent-api-5-ee-ed5"
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/docs/Entity-Framework/Model/EF_CF_namingConventions-1a1": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/docs/Entity-Framework/Model/EF_CF_KeysConvention-8dc": {
|
||||
"__comp": "__comp---theme-doc-item-178-a40",
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-c-sharp-samples-docs-entity-framework-model-ef-cf-naming-conventionsb-56-cf5"
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-mchsamples-net-core-docs-entity-framework-model-ef-cf-keys-conventionc-32-28d"
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/docs/intro-e93": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/docs/Entity-Framework/Model/EF_CF_KeysDataAnnotations-1cd": {
|
||||
"__comp": "__comp---theme-doc-item-178-a40",
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-c-sharp-samples-docs-intro-0-e-3-a29"
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-mchsamples-net-core-docs-entity-framework-model-ef-cf-keys-data-annotations-821-d3f"
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/CSharp_samples/-3c0": {
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/docs/Entity-Framework/Model/EF_CF_namingConventions-e42": {
|
||||
"__comp": "__comp---theme-doc-item-178-a40",
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-mchsamples-net-core-docs-entity-framework-model-ef-cf-naming-conventionsb-56-aef"
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/docs/intro-406": {
|
||||
"__comp": "__comp---theme-doc-item-178-a40",
|
||||
"content": "content---documentation-mch-samples-net-docusaurus-mchsamples-net-core-docs-intro-0-e-3-4af"
|
||||
},
|
||||
"/documentation/mchSamples_.NET/docusaurus/mchsamples-.net-core/-39b": {
|
||||
"__comp": "__comp---site-src-pages-index-jsc-4-f-f99",
|
||||
"__context": {
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-c-sharp-samples-markdown-pagef-9-b-493"
|
||||
"plugin": "plugin---documentation-mch-samples-net-docusaurus-mchsamples-net-core-markdown-pagee-05-e1f"
|
||||
},
|
||||
"config": "config---documentation-mch-samples-net-docusaurus-c-sharp-samples-5-e-9-300"
|
||||
"config": "config---documentation-mch-samples-net-docusaurus-mchsamples-net-core-5-e-9-c93"
|
||||
}
|
||||
}
|
@ -0,0 +1,129 @@
|
||||
---
|
||||
sidebar_label: '2.4. Keys convention (Entity Framework Code First)'
|
||||
sidebar_position: 4
|
||||
description: "explique comment créer les clés primaires d'une entité lorsqu'on utilise les conventions d'écriture"
|
||||
---
|
||||
|
||||
# Keys conventions
|
||||
*06/01/2020 ⋅ Marc Chevaldonné*
|
||||
|
||||
---
|
||||
|
||||
Cet exemple traite des clés primaires associées aux entités.
|
||||
|
||||
:::info Prérequis
|
||||
Je n'explique pas à travers cet exemple les principes de base d'**Entity Framework Core** et en particulier les chaînes de connexion et le lien entre entité et table.
|
||||
Pour plus de renseignements sur :
|
||||
* les chaînes de connexion : *ex_041_001_ConnectionStrings*
|
||||
* les liens entre entités et tables : *ex_042_001_EF_CF_conventions*, *ex_042_002_EF_CF_data_annotations* et *ex_042_003_EF_CF_Fluent_API*
|
||||
:::
|
||||
Cet exemple montre le cas particulier de la gestion des clés primaires lors de l'utilisation des **conventions d'écriture**.
|
||||
Vous pourrez trouver une version plus ou moins équivalente avec les *data annotations* ici : **ex_042_005_Keys_data_annotations**.
|
||||
Vous pourrez trouver une version plus ou moins équivalente avec la *Fluent API* ici : **ex_042_006_Keys_FluentAPI**.
|
||||
|
||||
---
|
||||
|
||||
## Les clés primaires
|
||||
Une clé permet de rendre unique chaque instance d'une entité. La plupart des entités n'ont qu'une seule clé qui est alors transformée en *clé primaire* pour les bases de données relationnelles.
|
||||
:::note
|
||||
une entité peut avoir d'autres clés, on parle d'__alternate keys__. Elles seront présentées dans les exemples sur les relations entre entités.
|
||||
:::
|
||||
Si on utilise les *conventions d'écriture*, une propriété pour être transformée en clé doit respecter les contraintes suivantes :
|
||||
* elle doit être nommée ```Id``` ou ```ID```,
|
||||
* elle doit être nommée ```<typeDeLEntite>Id```, e.g. ```NounoursId```.
|
||||
|
||||
Les autres contraintes sur une clé dans le cas de l'utilisation des *conventions d'écriture* sont :
|
||||
* elle doit être de type ```int```, ```string```, ```byte[]```. Toutefois, certains types nécessitent l'utilisation de converteurs pour être utilisés avec certains fournisseurs. Je conseille donc l'utilisation de ```int``` qui marche avec la grande majorité des fournisseurs.
|
||||
* elle est générée lors de l'insertion en base.
|
||||
|
||||
Les autres modes (*data annotations* et *Fluent API*) offrent plus de solutions quant à la gestion des clés.
|
||||
|
||||
## La classe ```Nounours```
|
||||
La classe ```Nounours``` utilise les conventions d'écriture.
|
||||
* Par défaut, les propriétés utilisées comme clés primaires sont en mode **Generated on add**.
|
||||
Une nouvelle valeur est donc générée lors de l'insertion d'une nouvelle entité en base. Les valeurs des autres propriétés ne sont pas générées lors de l'insertion ou de la mise à jour.
|
||||
* Dans cette classe, j'ai respecté la contrainte de nommage qui propose ```Id``` ou ```ID```
|
||||
```csharp title='Nounours.cs'
|
||||
public int ID
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
```
|
||||
|
||||
## La classe ```Cylon```
|
||||
La classe ```Cylon``` utilise les conventions d'écriture.
|
||||
* Dans cette classe, j'ai respecté la contrainte de nommage qui propose ```<TypeDeLEntité>Id```
|
||||
```csharp title='Nounours.cs'
|
||||
public int CylonId
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
```
|
||||
|
||||
## La classe ```Program```
|
||||
Cette classe est le point d'entrée du programme :
|
||||
* Elle crée des instances de ```Nounours``` et de ```Cylon``` et les ajoute en base après avoir nettoyé les tables au préalables.
|
||||
* Elle affiche les ```Nounours``` et les ```Cylon```.
|
||||
:::tip
|
||||
Notez la génération des identifiants !
|
||||
:::
|
||||
|
||||
## Comment exécuter cet exemple ?
|
||||
Pour tester cette application, n'oubliez pas les commandes comme présentées dans l'exemple ex_041_001 : pour générer l'exemple, il vous faut d'abord préparer les migrations et les tables.
|
||||
* Ouvrez la *Console du Gestionnaire de package*, pour cela, dirigez-vous dans le menu *Outils*, puis *Gestionnaire de package NuGet*, puis *Console du Gestionnaire de package*.
|
||||
* Dans la console que vous venez d'ouvrir, déplacez-vous dans le dossier du projet .NET Core, ici :
|
||||
```
|
||||
cd .\p08_BDD_EntityFramework\ex_042_004_Keys_conventions
|
||||
```
|
||||
:::note
|
||||
si vous n'avez pas installé correctement EntityFrameworkCore, il vous faudra peut-être utiliser également :
|
||||
|
||||
* ```dotnet tool install --global dotnet-ef``` si vous utilisez la dernière version de .NET Core (3.1 aujourd'hui),
|
||||
|
||||
* ```dotnet tool install --global dotnet-ef --version 3.0.0``` si vous vous utiliser spécifiquement .NET Core 3.0.
|
||||
:::
|
||||
|
||||
* Migration :
|
||||
```
|
||||
dotnet ef migrations add migration_ex_042_004
|
||||
```
|
||||
* Création de la table :
|
||||
```
|
||||
dotnet ef database update
|
||||
```
|
||||
* Génération et exécution
|
||||
Vous pouvez maintenant générer et exécuter l'exemple **ex_042_004_Keys_conventions**.
|
||||
|
||||
* Comment vérifier le contenu des bases de données SQL Server ?
|
||||
Vous pouvez vérifier le contenu de votre base en utilisant l'*Explorateur d'objets SQL Server*.
|
||||
* Pour cela, allez dans le menu *Affichage* puis *Explorateur d'objets SQL Server*.
|
||||
![Sql Server](../Fundamentals/ConnectionStringsFiles/sqlserver_01.png)
|
||||
|
||||
* Déployez dans l'*Explorateur d'objets SQL Server* :
|
||||
* *SQL Server*,
|
||||
* puis *(localdb)\MSSQLLocalDB ...*,
|
||||
* puis *Bases de données*
|
||||
* puis celle portant le nom de votre migration, dans mon cas : *ex_042_004_Keys_conventions.Nounours.mdf*
|
||||
* puis *Tables*
|
||||
* Faites un clic droit sur la table *dbo.Nounours* puis choisissez *Afficher les données*
|
||||
![Sql Server](../Fundamentals/ConnectionStringsFiles/sqlserver_02.png)
|
||||
|
||||
* Le résultat de l'exécution peut être :
|
||||
```
|
||||
database after cleaning and adding 3 Nounours and 9 Cylons and saving changes :
|
||||
Nounours 1: Chewbacca (27/05/1977, 1234567 poils)
|
||||
Nounours 2: Yoda (21/05/1980, 3 poils)
|
||||
Nounours 3: Ewok (25/05/1983, 3456789 poils)
|
||||
Cylon 1: John Cavil, Number 1
|
||||
Cylon 2: Leoben Conoy, Number 2
|
||||
Cylon 3: D'Anna Biers, Number 3
|
||||
Cylon 4: Simon, Number 4
|
||||
Cylon 5: Aaron Doral, Number 5
|
||||
Cylon 6: Caprica 6, Number 6
|
||||
Cylon 7: Daniel, Number 7
|
||||
Cylon 8: Boomer, Number 8
|
||||
Cylon 9: Athena, Number 8
|
||||
```
|
||||
:::note
|
||||
les identifiants peuvent varier en fonction du nombre d'exécution de l'exemple depuis la création de la base de données.
|
||||
:::
|
@ -0,0 +1,145 @@
|
||||
---
|
||||
sidebar_label: '2.5. Keys data annotations (Entity Framework Code First)'
|
||||
sidebar_position: 5
|
||||
description: "explique comment créer les clés primaires d'une entité lorsqu'on utilise les *data annotations"
|
||||
---
|
||||
|
||||
# Keys data annotations_
|
||||
*06/01/2020 ⋅ Marc Chevaldonné*
|
||||
|
||||
---
|
||||
|
||||
Cet exemple traite des clés primaires associées aux entités.
|
||||
|
||||
:::info Prérequis
|
||||
Je n'explique pas à travers cet exemple les principes de base d'**Entity Framework Core** et en particulier les chaînes de connexion et le lien entre entité et table.
|
||||
Pour plus de renseignements sur :
|
||||
* les chaînes de connexion : *ex_041_001_ConnectionStrings*
|
||||
* les liens entre entités et tables : *ex_042_001_EF_CF_conventions*, *ex_042_002_EF_CF_data_annotations* et *ex_042_003_EF_CF_Fluent_API*
|
||||
:::
|
||||
|
||||
Cet exemple montre le cas particulier de la gestion des clés primaires lors de l'utilisation des **data annotations**.
|
||||
Vous pourrez trouver une version plus ou moins équivalente avec les *conventions d'écriture* ici : **ex_042_004_Keys_conventions**.
|
||||
Vous pourrez trouver une version plus ou moins équivalente avec la *Fluent API* ici : **ex_042_006_Keys_FluentAPI**.
|
||||
|
||||
---
|
||||
|
||||
## Les clés primaires
|
||||
Une clé permet de rendre unique chaque instance d'une entité. La plupart des entités n'ont qu'une seule clé qui est alors transformée en *clé primaire* pour les bases de données relationnelles.
|
||||
*Note: une entité peut avoir d'autres clés, on parle d'__alternate keys__. Elles seront présentées dans les exemples sur les relations entre entités.*
|
||||
Si on utilise les *data annotations*, une propriété pour être transformée en clé doit respecter les contraintes suivantes :
|
||||
* aucune contrainte sur le nommage de la propriété ; j'ai par exemple choisi ```UniqueId``` pour ```Nounours```, et ```FrakId``` pour ```Cylon```.
|
||||
* elle doit être précédée de l'annotation ```[Key]```
|
||||
* elle peut être générée par la base et dans ce cas elle doit être précédée de l'annotation ```[DatabaseGenerated(DatabaseGeneratedOption.Identity)]```, ou ne pas être générée par la base et dans ce cas être précédée de l'annotation ```[DatabaseGenerated(DatabaseGeneratedOption.None)]```.
|
||||
Dans ce dernier cas, c'est à l'utilisateur de gérer ses propres clés et leur unicité dans la base.
|
||||
* elle peut être de différents types ```int```, ```string```, ```Guid```, ```byte[]```... attention toutefois si vous choisissez de laisser la table générer les valeurs car certains fournisseurs ne savent pas générer tous les types.
|
||||
|
||||
## La classe ```Nounours```
|
||||
La classe ```Nounours``` utilise les *data annotations* et laisse le soin à la base de générer les clés uniques.
|
||||
```csharp title='Nounours.cs'
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
public int UniqueId
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
```
|
||||
|
||||
## La classe ```Cylon```
|
||||
La classe ```Cylon``` utilise les *data annotations* et laisse le soin à l'utilisateur de gérer ses clés uniques.
|
||||
```csharp title='Nounours.cs'
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
public int FrakId
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
```
|
||||
|
||||
## La classe ```Program```
|
||||
Cette classe est le point d'entrée du programme :
|
||||
* Elle crée des instances de ```Nounours``` et de ```Cylon``` et les ajoute en base après avoir nettoyé les tables au préalables.
|
||||
Notez que l'utilisateur n'a pas besoin de donner une valeur à ```Nounours.UniqueId``` puisque la base s'en charge, alors qu'il doit donner une valeur à ```Cylon.FrakId``` car la base de ne génère pas les clés.
|
||||
Si vous ne donnez pas une valeur à ```Cylon.FrakId```, alors la valeur par défaut est donnée (```0```). Il n'y aura pas de problème si cet identifiant n'a pas été donné, mais dès le deuxième ```Cylon```, vous aurez une exception.
|
||||
:::note
|
||||
la valeur par défaut pour ```int``` est ```0``` ; pour ```Guid```, ```Guid.Empty``` ; pour ```string```, ```null```...
|
||||
:::
|
||||
```csharp title='Program.cs'
|
||||
Nounours chewie = new Nounours { Nom = "Chewbacca", DateDeNaissance = new DateTime(1977, 5, 27), NbPoils = 1234567 };
|
||||
Nounours yoda = new Nounours { Nom = "Yoda", DateDeNaissance = new DateTime(1980, 5, 21), NbPoils = 3 };
|
||||
Nounours ewok = new Nounours { Nom = "Ewok", DateDeNaissance = new DateTime(1983, 5, 25), NbPoils = 3456789 };
|
||||
|
||||
Cylon c1 = new Cylon { FrakId = 2, Name = "John Cavil", Generation = 1 };
|
||||
Cylon c2 = new Cylon { FrakId = 4, Name = "Leoben Conoy", Generation = 2 };
|
||||
Cylon c3 = new Cylon { FrakId = 6, Name = "D'Anna Biers", Generation = 3 };
|
||||
Cylon c4 = new Cylon { FrakId = 8, Name = "Simon", Generation = 4 };
|
||||
Cylon c5 = new Cylon { FrakId = 10, Name = "Aaron Doral", Generation = 5 };
|
||||
Cylon c6 = new Cylon { FrakId = 12, Name = "Caprica 6", Generation = 6 };
|
||||
Cylon c7 = new Cylon { FrakId = 14, Name = "Daniel", Generation = 7 };
|
||||
Cylon c8 = new Cylon { FrakId = 16, Name = "Boomer", Generation = 8 };
|
||||
Cylon c9 = new Cylon { FrakId = 17, Name = "Athena", Generation = 8 };
|
||||
```
|
||||
* Elle affiche les ```Nounours``` et les ```Cylon```.
|
||||
:::tip
|
||||
Notez la génération des identifiants pour la classe ```Nounours``` uniquement : si vous exécutez plusieurs fois l'exemple, les clés des ```Nounours``` changent mais pas celles des ```Cylon```.
|
||||
:::
|
||||
|
||||
## Comment exécuter cet exemple ?
|
||||
Pour tester cette application, n'oubliez pas les commandes comme présentées dans l'exemple ex_041_001 : pour générer l'exemple, il vous faut d'abord préparer les migrations et les tables.
|
||||
* Ouvrez la *Console du Gestionnaire de package*, pour cela, dirigez-vous dans le menu *Outils*, puis *Gestionnaire de package NuGet*, puis *Console du Gestionnaire de package*.
|
||||
* Dans la console que vous venez d'ouvrir, déplacez-vous dans le dossier du projet .NET Core, ici :
|
||||
```
|
||||
cd .\p08_BDD_EntityFramework\ex_042_005_Keys_data_annotations
|
||||
```
|
||||
:::note
|
||||
si vous n'avez pas installé correctement EntityFrameworkCore, il vous faudra peut-être utiliser également :
|
||||
|
||||
* ```dotnet tool install --global dotnet-ef``` si vous utilisez la dernière version de .NET Core (3.1 aujourd'hui),
|
||||
|
||||
* ```dotnet tool install --global dotnet-ef --version 3.0.0``` si vous vous utiliser spécifiquement .NET Core 3.0.
|
||||
:::
|
||||
|
||||
* Migration :
|
||||
```
|
||||
dotnet ef migrations add migration ex_042_005
|
||||
```
|
||||
* Création de la table :
|
||||
```
|
||||
dotnet ef database update
|
||||
```
|
||||
* Génération et exécution
|
||||
Vous pouvez maintenant générer et exécuter l'exemple **ex_042_005_Keys_data_annotations**.
|
||||
|
||||
* Comment vérifier le contenu des bases de données SQL Server ?
|
||||
Vous pouvez vérifier le contenu de votre base en utilisant l'*Explorateur d'objets SQL Server*.
|
||||
* Pour cela, allez dans le menu *Affichage* puis *Explorateur d'objets SQL Server*.
|
||||
![Sql Server](../Fundamentals/ConnectionStringsFiles/sqlserver_01.png)
|
||||
|
||||
* Déployez dans l'*Explorateur d'objets SQL Server* :
|
||||
* *SQL Server*,
|
||||
* puis *(localdb)\MSSQLLocalDB ...*,
|
||||
* puis *Bases de données*
|
||||
* puis celle portant le nom de votre migration, dans mon cas : *ex_042_005_Keys_data_annotations.Nounours.mdf*
|
||||
* puis *Tables*
|
||||
* Faites un clic droit sur la table *dbo.Nounours* puis choisissez *Afficher les données*
|
||||
![Sql Server](../Fundamentals/ConnectionStringsFiles/sqlserver_02.png)
|
||||
|
||||
* Le résultat de l'exécution peut être :
|
||||
```
|
||||
database after cleaning and adding 3 Nounours and 9 Cylons and saving changes :
|
||||
Nounours 1: Chewbacca (27/05/1977, 1234567 poils)
|
||||
Nounours 2: Yoda (21/05/1980, 3 poils)
|
||||
Nounours 3: Ewok (25/05/1983, 3456789 poils)
|
||||
Cylon 2: John Cavil, Number 1
|
||||
Cylon 4: Leoben Conoy, Number 2
|
||||
Cylon 6: D'Anna Biers, Number 3
|
||||
Cylon 8: Simon, Number 4
|
||||
Cylon 10: Aaron Doral, Number 5
|
||||
Cylon 12: Caprica 6, Number 6
|
||||
Cylon 14: Daniel, Number 7
|
||||
Cylon 16: Boomer, Number 8
|
||||
Cylon 17: Athena, Number 8
|
||||
```
|
||||
:::note
|
||||
les identifiants des ```Nounours``` peuvent varier en fonction du nombre d'exécution de l'exemple depuis la création de la base de données, mais pas ceux des ```Cylon``` puisqu'ils sont gérés par l'utilisateur.
|
||||
:::
|
Loading…
Reference in new issue