领域建模

ๅœจไปปไฝ•้ข†ๅŸŸ้ฉฑๅŠจ็š„ๅบ”็”จ็จ‹ๅบ็š„ๆ ธๅฟƒ๏ผŒๆ˜ฏ่กจ็คบ็ณป็ปŸๆ ธๅฟƒ็Ÿฅ่ฏ† ๅ’ŒไธšๅŠก่ง„ๅˆ™็š„ๆจกๅž‹ใ€‚่‰ฏๅฅฝ็š„้ข†ๅŸŸๅปบๆจกๆ„ๅ‘ณ็€ๅฐ†็Žฐๅฎžไธ–็•Œ็š„ๆฆ‚ๅฟต่ฝฌๅŒ–ไธบ ๅ…ทๆœ‰่กจ็ŽฐๅŠ›ใ€ๅ†…่šๆ€งๅ’Œไธ€่‡ดๆ€ง็š„่ฝฏไปถ็ป“ๆž„ใ€‚

ๅฎžไฝ“

ๅฎžไฝ“ๆ˜ฏไธ€ไธชไธป่ฆ็”ฑๅ…ถ่บซไปฝๅฎšไน‰็š„ๅฏน่ฑก๏ผŒ่€Œไธไป…ไป…ๆ˜ฏๅ…ถๅฑžๆ€งใ€‚ๅณไฝฟๅฑžๆ€ง้šๆ—ถ้—ดๅ˜ๅŒ–๏ผŒๅฎžไฝ“็š„่บซไปฝไฟๆŒไธๅ˜ใ€‚

ไธป่ฆ็‰นๅพ๏ผš

  • ๅ…ทๆœ‰ๅ”ฏไธ€่บซไปฝ๏ผˆ้€šๅธธๆ˜ฏไธ€ไธชId๏ผ‰ใ€‚
  • ้‡่ฆ็š„ๆ˜ฏๅฎžไฝ“็š„ๆ˜ฏ่ฐ๏ผŒ่€Œไธไป…ไป…ๆ˜ฏๅฎƒๅŒ…ๅซ็š„ไป€ไนˆใ€‚
  • ๅ…ถๅฑžๆ€งๅฏไปฅ้š็€ๆ—ถ้—ดๅ˜ๅŒ–ใ€‚

ไฝฟ็”จ Lino ๅˆ›ๅปบๅฎžไฝ“

่ฆไฝฟ็”จ Lino ๅˆ›ๅปบๆ–ฐๅฎžไฝ“๏ผŒ่ฏทๆ‰ง่กŒ๏ผš

lino entity new

ๅ‘ฝไปค่กŒๅŠฉๆ‰‹ๅฐ†่ฏข้—ฎ๏ผš

  • ๆœๅŠก โ€“ ๅฎžไฝ“ๅฐ†่ขซๅˆ›ๅปบ็š„ๆœๅŠกใ€‚
  • ๆจกๅ— โ€“ ๅฎžไฝ“ๅฐ†่ขซๅˆ›ๅปบ็š„ๆจกๅ—๏ผˆไป…้™ๆจกๅ—ๅŒ–ๆœๅŠก๏ผ‰ใ€‚
  • ๅฎžไฝ“ๅ็งฐ โ€“ ๅŸŸๅ’Œๆ•ฐๆฎๅบ“่กจไธญไฝฟ็”จ็š„ๅ็งฐใ€‚

็„ถๅŽ๏ผŒๆ‚จๅฐ†ๅฎšไน‰ๆž„ๆˆๅฎžไฝ“็š„ๅญ—ๆฎต๏ผŒๅนถ้…็ฝฎๆฏไธชๅญ—ๆฎตใ€‚

ๅฏ็”จๅญ—ๆฎต็ฑปๅž‹

็ฑปๅž‹ ๆ่ฟฐ ่Œƒๅ›ด / ๅค‡ๆณจ
short16ไฝๆ•ดๆ•ฐ-32,768 โ†’ 32,767
int32ไฝๆ•ดๆ•ฐ-2,147,483,648 โ†’ 2,147,483,647
long64ไฝๆ•ดๆ•ฐ-9,223,372,036,854,775,808 โ†’ 9,223,372,036,854,775,807
stringๆ–‡ๆœฌๆœ€ๅคš็บฆ20ไบฟๅญ—็ฌฆ
boolๅธƒๅฐ”ๅ€ผtrue ๆˆ– false
Guidๅ…จๅฑ€ๅ”ฏไธ€ๆ ‡่ฏ†็ฌฆๅˆ†ๅธƒๅผๅ”ฏไธ€ๆ€ง
decimal้ซ˜็ฒพๅบฆๅฐๆ•ฐ้€‚ๅˆ่ดงๅธๅ€ผ
floatๆตฎ็‚นๆ•ฐ๏ผˆ32ไฝ๏ผ‰็บฆ6-9ไฝ็ฒพๅบฆ
doubleๆตฎ็‚นๆ•ฐ๏ผˆ64ไฝ๏ผ‰็บฆ15-17ไฝ็ฒพๅบฆ
DateTimeๆ—ฅๆœŸๅ’Œๆ—ถ้—ดๅŒ…ๅซๆ—ถๅŒบ
DateOnlyไป…ๆ—ฅๆœŸ (C# 10+)โ€“
TimeOnlyไป…ๆ—ถ้—ด (C# 10+)โ€“
Entityๅผ•็”จๅฆไธ€ๅฎžไฝ“1:1 ๆˆ– 1:N
Value Objectไธๅฏๅ˜ๅ€ผๅฏน่ฑกไพ‹ๅฆ‚๏ผšๅœฐๅ€๏ผŒCPF
Enumๆžšไธพๅ›บๅฎšๅ€ผ้›†ๅˆ
List<Entity>ๅฎžไฝ“ๅˆ—่กจ1:N
ManyToManyๅคšๅฏนๅคš้œ€่ฆไธญ้—ด่กจ

็คบไพ‹

ๅˆ›ๅปบๅฎžไฝ“ Person๏ผš

โ”Œโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ PK โ”‚ FK โ”‚ Property name โ”‚ Type   โ”‚ Length โ”‚ Required  โ”‚ Auto-increment โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ x  โ”‚    โ”‚ Id            โ”‚ int    โ”‚        โ”‚     x     โ”‚       x        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    โ”‚    โ”‚ Name          โ”‚ string โ”‚  100   โ”‚     x     โ”‚                โ”‚
โ””โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Lino ็”Ÿๆˆ็š„็ป“ๆž„๏ผš

MyApp/
โ””โ”€โ”€ src/
    โ””โ”€โ”€ Services/
        โ””โ”€โ”€ MyService/
            โ””โ”€โ”€ Domain/
                โ”œโ”€โ”€ MyApp.MyService.Domain.csproj
                โ””โ”€โ”€ Aggregates/
                    โ””โ”€โ”€ People/
                        โ”œโ”€โ”€ Person.cs
                        โ”œโ”€โ”€ Errors/
                        โ”‚   โ””โ”€โ”€ PersonErrors.cs
                        โ”œโ”€โ”€ Repositories/
                        โ”‚   โ””โ”€โ”€ IPersonRepository.cs
                        โ””โ”€โ”€ Resources/
                            โ””โ”€โ”€ Person/
                                โ”œโ”€โ”€ PersonResources.resx
                                โ”œโ”€โ”€ PersonResources.en.resx
                                โ””โ”€โ”€ PersonResources.pt-BR.resx

ๅฎšไน‰ๅฎŒๅฎžไฝ“ๅŽ๏ผŒไฝฟ็”จ Lino ็ฎก็†่ฟ็งป๏ผŒไฟๆŒๆ•ฐๆฎๅบ“ๅŒๆญฅใ€‚ ่ฏฅ่ฟ‡็จ‹ๅฐ†ๅœจๆŒไน…ๅฑ‚็ซ ่Š‚ไธญ่ฏฆ็ป†่ฏดๆ˜Žใ€‚

ๅ€ผๅฏน่ฑก

ไธ€ไธช ๅ€ผๅฏน่ฑก ่กจ็คบไธ€ไธชไป…็”ฑๅ…ถๅฑžๆ€งๅฎšไน‰็š„้ข†ๅŸŸๆฆ‚ๅฟต โ€” ๅฎƒๆฒกๆœ‰่‡ช่บซ็š„่บซไปฝๆ ‡่ฏ†ใ€‚ๅฆ‚ๆžœไธคไธชๅ€ผๅฏน่ฑก็š„ๆ‰€ๆœ‰ๅฑžๆ€งๅ€ผ้ƒฝ็›ธๅŒ๏ผŒๅˆ™่ฎคไธบๅฎƒไปฌ็›ธ็ญ‰ใ€‚

ไธป่ฆ็‰นๅพ๏ผš

  • ๅˆ›ๅปบๅŽไธๅฏๅ˜ใ€‚
  • ๆฒกๆœ‰ Idใ€‚

ไฝฟ็”จ Lino ๅˆ›ๅปบๅ€ผๅฏน่ฑก

ๆ‰ง่กŒ๏ผš

lino value-object new

CLI ไผš่ฏข้—ฎ๏ผš

  • ๆœๅŠก โ€“ ๅˆ›ๅปบๅฏน่ฑก็š„ๆœๅŠกใ€‚
  • ๆจกๅ— โ€“ ๅˆ›ๅปบๅฏน่ฑก็š„ๆจกๅ—๏ผˆไป…้™ๆจกๅ—ๅŒ–ๆœๅŠก๏ผ‰ใ€‚
  • ไฝ็ฝฎ โ€“ ๅŸŸๆ นๆˆ–็‰นๅฎš่šๅˆๆ นใ€‚
  • ๅ€ผๅฏน่ฑกๅ็งฐใ€‚

็„ถๅŽๅฎšไน‰ๆž„ๆˆ่ฏฅๅฏน่ฑก็š„ๅญ—ๆฎตใ€‚

ๅฏ็”จๅญ—ๆฎต็ฑปๅž‹

็ฑปๅž‹ๆ่ฟฐๅค‡ๆณจ
short16 ไฝๆ•ดๆ•ฐ-32,768 โ†’ 32,767
int32 ไฝๆ•ดๆ•ฐ-2,147,483,648 โ†’ 2,147,483,647
long64 ไฝๆ•ดๆ•ฐ-9,223,372,036,854,775,808 โ†’ 9,223,372,036,854,775,807
stringๆ–‡ๆœฌๆœ€ๅคš็บฆ 20 ไบฟๅญ—็ฌฆ
boolๅธƒๅฐ”ๅ€ผtrue/false
decimal็ฒพ็กฎๅฐๆ•ฐ่ดงๅธๅ€ผ
floatๆตฎ็‚นๆ•ฐ๏ผˆ32 ไฝ๏ผ‰็บฆ 6โ€“9 ไฝๆ•ฐๅญ—
doubleๆตฎ็‚นๆ•ฐ๏ผˆ64 ไฝ๏ผ‰็บฆ 15โ€“17 ไฝๆ•ฐๅญ—
DateTimeๆ—ฅๆœŸ/ๆ—ถ้—ดๅŒ…ๅซๆ—ถๅŒบ
DateOnlyไป…ๆ—ฅๆœŸC# 10 ๅŠไปฅไธŠ
TimeOnlyไป…ๆ—ถ้—ดC# 10 ๅŠไปฅไธŠ

็คบไพ‹

ๅ€ผๅฏน่ฑก Address๏ผš

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Property name โ”‚ Type   โ”‚ Length โ”‚ Required  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Street        โ”‚ string โ”‚  100   โ”‚     x     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Number        โ”‚ string โ”‚   10   โ”‚     x     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Neighborhood  โ”‚ string โ”‚   50   โ”‚           โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ City          โ”‚ string โ”‚  100   โ”‚     x     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ State         โ”‚ string โ”‚   2    โ”‚     x     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ PostalCode    โ”‚ string โ”‚   20   โ”‚     x     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Country       โ”‚ string โ”‚  100   โ”‚     x     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

็”Ÿๆˆ็š„ๆ–‡ไปถ็ป“ๆž„๏ผˆ่šๅˆ Person๏ผ‰๏ผš

MyApp/
โ””โ”€โ”€ src/
    โ””โ”€โ”€ Services/
        โ””โ”€โ”€ MyService/
            โ””โ”€โ”€ Domain/
                โ”œโ”€โ”€ MyApp.MyService.Domain.csproj
                โ””โ”€โ”€ Aggregates/
                    โ””โ”€โ”€ People/
                        โ”œโ”€โ”€ Person.cs
                        โ”œโ”€โ”€ ValueObjects/
                        โ”‚   โ””โ”€โ”€ Address.cs
                        โ”œโ”€โ”€ Errors/
                        โ”‚   โ”œโ”€โ”€ AddressErrors.cs
                        โ”‚   โ””โ”€โ”€ PersonErrors.cs
                        โ”œโ”€โ”€ Repositories/
                        โ”‚   โ””โ”€โ”€ IPersonRepository.cs
                        โ””โ”€โ”€ Resources/
                            โ”œโ”€โ”€ Address/
                            โ”‚   โ”œโ”€โ”€ AddressResources.resx
                            โ”‚   โ”œโ”€โ”€ AddressResources.en.resx
                            โ”‚   โ””โ”€โ”€ AddressResources.pt-BR.resx
                            โ””โ”€โ”€ Person/
                                โ”œโ”€โ”€ PersonResources.resx
                                โ”œโ”€โ”€ PersonResources.en.resx
                                โ””โ”€โ”€ PersonResources.pt-BR.resx

ไธŽๅฎžไฝ“ไธ€ๆ ท๏ผŒMigrations ๅฏไปฅ็”ฑ Lino ็ฎก็†๏ผŒไปฅไฟๆŒๆ•ฐๆฎๆจกๅž‹ๅŒๆญฅใ€‚

ๆžšไธพ

ๅœจ้ข†ๅŸŸ้ฉฑๅŠจ่ฎพ่ฎก๏ผˆDDD๏ผ‰ไธญ๏ผŒๆžšไธพๅฏไปฅ่ถ…่ถŠC#ไผ ็ปŸ็š„enumใ€‚ๅฎƒไปฌๅฏไปฅๆ˜ฏไธฐๅฏŒ็š„ๅฏน่ฑก๏ผŒ ่กจ็คบๅ›บๅฎš็Šถๆ€๏ผŒๅŒ…ๅซ้ชŒ่ฏใ€่พ…ๅŠฉๆ–นๆณ•็”š่‡ณ่กŒไธบใ€‚

ๅŠจๆœบ๏ผš

  • C# ็š„ enum ไป…้™ไบŽๆ•ดๆ•ฐๆˆ–ๅญ—็ฌฆไธฒๅ€ผใ€‚
  • ๅฐ†ๆžšไธพๅปบๆจกไธบ็ฑปๅฏไปฅๆไพ›ๆ›ด้ซ˜็š„็ตๆดปๆ€งๅ’Œ่กจ่พพๅŠ›ใ€‚

ไธป่ฆ็‰น็‚น๏ผš

  • ๅฎƒไปฌๆ˜ฏ็ปงๆ‰ฟ่‡ชๅ…ฑๅŒๅŸบ็ฑป็š„็ฑป๏ผŒๅฐ่ฃ…ไบ† Id ๅ’Œ Nameใ€‚
  • ๅ…่ฎธๆทปๅŠ ้ชŒ่ฏใ€่พ…ๅŠฉๆ–นๆณ•ๅ’Œ่กŒไธบใ€‚

ไฝฟ็”จ Lino ๅˆ›ๅปบๆžšไธพ

ๆ‰ง่กŒ๏ผš

lino enum new

ๅŠฉๆ‰‹ไผš่ฏข้—ฎ๏ผš

  • ๆœๅŠกใ€‚
  • ๆจกๅ—๏ผˆๅฆ‚ๆžœ้€‚็”จ๏ผ‰ใ€‚
  • ไฝ็ฝฎ โ€” ๅŸŸๆˆ–่šๅˆ็š„ๆ นใ€‚
  • ๆžšไธพๅ็งฐใ€‚
  • ็ฑปๅž‹ โ€” ไผ ็ปŸ็š„ enum ๆˆ–ๆ™บ่ƒฝๆžšไธพ๏ผˆclass๏ผ‰ใ€‚
  • ๅญ˜ๅ‚จๆ–นๅผ โ€” ๆ•ฐๆฎๅบ“ไธญ็š„ int ๆˆ– stringใ€‚

็คบไพ‹

ๆžšไธพ PersonStatus๏ผš

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Value โ”‚ Name      โ”‚ Display Name โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ 1     โ”‚ Active    โ”‚ Active       โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ 2     โ”‚ Inactive  โ”‚ Inactive     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ 3     โ”‚ Suspended โ”‚ Suspended    โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ 4     โ”‚ Deleted   โ”‚ Deleted      โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

็”Ÿๆˆ็š„็ป“ๆž„๏ผš

MyApp/
โ””โ”€โ”€ src/
    โ””โ”€โ”€ Services/
        โ””โ”€โ”€ MyService/
            โ””โ”€โ”€ Domain/
                โ”œโ”€โ”€ MyApp.MyService.Domain.csproj
                โ””โ”€โ”€ Aggregates/
                    โ””โ”€โ”€ People/
                        โ”œโ”€โ”€ Person.cs
                        โ”œโ”€โ”€ Enums/
                        โ”‚   โ””โ”€โ”€ PersonStatus.cs
                        โ”œโ”€โ”€ ValueObjects/
                        โ”‚   โ””โ”€โ”€ Address.cs
                        โ”œโ”€โ”€ Errors/
                        โ”‚   โ”œโ”€โ”€ AddressErrors.cs
                        โ”‚   โ””โ”€โ”€ PersonErrors.cs
                        โ”œโ”€โ”€ Repositories/
                        โ”‚   โ””โ”€โ”€ IPersonRepository.cs
                        โ””โ”€โ”€ Resources/
                            โ”œโ”€โ”€ Address/
                            โ”‚   โ”œโ”€โ”€ AddressResources.resx
                            โ”‚   โ”œโ”€โ”€ AddressResources.en.resx
                            โ”‚   โ””โ”€โ”€ AddressResources.pt-BR.resx
                            โ”œโ”€โ”€ Person/
                            โ”‚   โ”œโ”€โ”€ PersonResources.resx
                            โ”‚   โ”œโ”€โ”€ PersonResources.en.resx
                            โ”‚   โ””โ”€โ”€ PersonResources.pt-BR.resx
                            โ””โ”€โ”€ PersonStatus/
                                โ”œโ”€โ”€ PersonStatusResources.resx
                                โ”œโ”€โ”€ PersonStatusResources.en.resx
                                โ””โ”€โ”€ PersonStatusResources.pt-BR.resx

ๅฐ†ๆžšไธพๅ€ผๅญ˜ๅ‚จไธบ string ๆ˜ฏๅฏ่กŒ็š„๏ผŒไธ”่ƒฝๆๅ‡ๅฏ่ฏปๆ€ง๏ผŒไฝ†้€šๅธธๅœจๆ€ง่ƒฝๅ’Œๅญ˜ๅ‚จๆ–น้ขๆ•ˆ็އ่พƒไฝŽใ€‚ ๅ› ๆญคๅปบ่ฎฎไฝฟ็”จ int ๅญ˜ๅ‚จ๏ผŒๅนถไธบๆžšไธพๅˆ›ๅปบ่พ…ๅŠฉๅฎžไฝ“๏ผˆ่กจ๏ผ‰๏ผŒๅ…ถไธป้”ฎๅฏนๅบ”ๆžšไธพๅ€ผ๏ผŒไปฅไฟ่ฏๅผ•็”จๅฎŒๆ•ดๆ€งๅนถ็ฎ€ๅŒ–็ปดๆŠคใ€‚

ๅฎšไน‰ๆžšไธพๅŽ๏ผŒไฝฟ็”จ Lino ็”Ÿๆˆๅนถๅบ”็”จ Migrations๏ผŒ็กฎไฟๆ•ฐๆฎๅบ“ๅๆ˜ ้ข†ๅŸŸๆจกๅž‹ใ€‚ ่ฏฆ็ป†ๅ†…ๅฎน่งๆŒไน…ๅฑ‚็ซ ่Š‚ใ€‚

发生了未处理的错误。 重新加载 ๐Ÿ—™