要在ASP.NET Core Web API中建立EF Core模型的外键关系,可以按照以下步骤进行操作:
例如,我们创建两个实体类:Author
和Book
,Book
实体类将包含一个指向Author
实体类的外键。
public class Author
{
public int Id { get; set; }
public string Name { get; set; }
public List Books { get; set; }
}
public class Book
{
public int Id { get; set; }
public string Title { get; set; }
public int AuthorId { get; set; }
public Author Author { get; set; }
}
DbContext
类中添加对应的DbSet
和配置外键关系。public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions options)
: base(options)
{
}
public DbSet Authors { get; set; }
public DbSet Books { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasOne(b => b.Author)
.WithMany(a => a.Books)
.HasForeignKey(b => b.AuthorId);
}
}
Startup.cs
文件的ConfigureServices
方法中配置数据库上下文和连接字符串。public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
// ...
}
[ApiController]
[Route("api/[controller]")]
public class BooksController : ControllerBase
{
private readonly ApplicationDbContext _context;
public BooksController(ApplicationDbContext context)
{
_context = context;
}
// GET: api/books
[HttpGet]
public async Task GetBooks()
{
var books = await _context.Books.ToListAsync();
return Ok(books);
}
// POST: api/books
[HttpPost]
public async Task PostBook(Book book)
{
_context.Books.Add(book);
await _context.SaveChangesAsync();
return CreatedAtAction(nameof(GetBook), new { id = book.Id }, book);
}
// ...
}
这样,我们就建立了ASP.NET Core Web API和EF Core模型的外键关系。在上述示例中,Book
实体类包含一个AuthorId
属性作为外键,同时也定义了一个Author
属性作为导航属性,用于访问关联的Author
实体。