添加实体
在 Acme.ContosoUniversity.Core
项目中添加文件夹 People
, 并在该文件夹中添加类:Person
, 内容如以下所示:1
2
3
4
5
6
7
8
9
10
11using Abp.Domain.Entities;
using System.ComponentModel.DataAnnotations.Schema;
namespace Acme.ContosoUniversity.People
{
[Table("AppPeople")]
public class Person : Entity
{
public virtual string Name { get; set; }
}
}
修改 数据上下文
打开 Acme.ContosoUniversity.EntityFramework
项目下的 EntityFramework/ContosoUniversityDbContext.cs
文件,在数据库上下文中添加 IDbSet<Person>
属性,如以下代码所示:
1 | namespace Acme.ContosoUniversity.EntityFramework |
添加 Application 服务类
在 Acme.ContosoUniversity.Application
项目中添加 People
文件夹,在该文件夹中添加类: IPersonAppService.cs
, 文件内容如以下所示:1
2
3
4
5
6
7
8
9
10
11
12using Abp.Application.Services;
using Acme.ContosoUniversity.People.Dto;
using System.Threading.Tasks;
namespace Acme.ContosoUniversity.People
{
public interface IPersonAppService: IApplicationService
{
Task<GetPeopleOutput> GetAllPeopleAsync();
Task AddNewPerson(AddNewPersonInput input);
}
}
在 People
文件夹中添加类:PersonAppService
,文件内容如以下代码所示:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39using Abp.Domain.Repositories;
using Acme.ContosoUniversity.People.Dto;
using AutoMapper;
using Castle.Core.Logging;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Acme.ContosoUniversity.People
{
public class PersonAppService : ContosoUniversityAppServiceBase, IPersonAppService
{
private readonly IRepository<Person> _personRepository;
public ILogger Logger { get; set; }
public PersonAppService(IRepository<Person> personRepository)
{
_personRepository = personRepository;
Logger = NullLogger.Instance;
}
public async Task AddNewPerson(AddNewPersonInput input)
{
Logger.Debug("Adding a new person:" + input.Name);
await _personRepository.InsertAsync(new Person { Name = input.Name });
// throw new NotImplementedException();
}
public async Task<GetPeopleOutput> GetAllPeopleAsync()
{
Logger.Debug("Getting all people");
return new GetPeopleOutput
{
People = Mapper.Map<List<PersonDto>>(await _personRepository.GetAllListAsync())
};
// throw new NotImplementedException();
}
}
}
在 People
文件夹中添加子文件夹 Dto
,在该文件夹中添加三个类:PersonDto
, GetPeopleOutput
, AddNewPersonInput
, 文件内容分别如以下所示:
PersonDto.cs1
2
3
4
5
6
7
8
9using Abp.Application.Services.Dto;
namespace Acme.ContosoUniversity.People.Dto
{
public class PersonDto : EntityDto
{
public string Name { get; set; }
}
}
GetPeopleOutput.cs1
2
3
4
5
6
7
8
9using System.Collections.Generic;
namespace Acme.ContosoUniversity.People.Dto
{
public class GetPeopleOutput
{
public List<PersonDto> People { get; set; }
}
}
AddNewPersonInput.cs1
2
3
4
5
6
7
8
9
10using System.ComponentModel.DataAnnotations;
namespace Acme.ContosoUniversity.People.Dto
{
public class AddNewPersonInput
{
[ ]
public string Name { get; set; }
}
}
创建 DTO 映射关系
修改 Acme.ContosoUniversity.Application
项目中的 ContosoUniversityApplicationModule.cs
文件,内容如以下代码所示:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22using System.Reflection;
using Abp.Modules;
using Acme.ContosoUniversity.People;
using Acme.ContosoUniversity.People.Dto;
using AutoMapper;
namespace Acme.ContosoUniversity
{
[ ]
public class ContosoUniversityApplicationModule : AbpModule
{
public override void Initialize()
{
IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
// 低版本的AutoMapper用这一行
// Mapper.CreateMap<Person, PersonDto>();
// 高版本的AutoMapper 改成这样的写法
Mapper.Initialize(x => x.CreateMap<Person, PersonDto>());
}
}
}
迁移和更新数据库
在 Visual Studio 2019
中菜单中选择:工具
-> NuGet包管理器
-> 程序包管理器控制台
,在打开的控制台中输入以下两个命令执行数据库迁移和更新:1
2add-migration init
update-database
在 WPF 中操作数据
打开 Acme.ContosoUniversity.WPF
项目中的 MainWindow.xaml
文件,分别添加 ListBox控件
(命名:lstPeople)、 TextBox控件
(命名:txtName) 和 Button控件
(命名:btnAdd),Button控件
添加单击事件。
MainWindow.xaml.cs 文件的代码如以下所示:
1 | using Abp.Dependency; |