use*_*465 11 asp.net asp.net-mvc razor asp.net-core
在ms docs Razor页面教程中,DbContext有一个DbSet学生集
public class SchoolContext : DbContext
{
public DbSet<Student> Students { get; set; }
Run Code Online (Sandbox Code Playgroud)
并在OnPostAsync()方法中使用DbSet<TEntity>.Add(TEntity)
方法(文档)创建并添加更新的学生:
var emptyStudent = new Student();
if (await TryUpdateModelAsync<Student>(
emptyStudent,
"student", // Prefix for form value.
s => s.FirstMidName, s => s.LastName, s => s.EnrollmentDate))
{
_context.Students.Add(emptyStudent);
await _context.SaveChangesAsync();
Run Code Online (Sandbox Code Playgroud)
该MVC教程也有一个DbContext
具有DbSet但是学生在StudentsController.cs的Create()方法后,它增加了学生直接调用DbContext.add()上的DbContext:
_context.Add(student);
await _context.SaveChangesAsync();
Run Code Online (Sandbox Code Playgroud)
我看到的另一个区别是,在MVC中,学生作为参数传入:
public async Task<IActionResult> Create([Bind("LastName,FirstMidName,EnrollmentDate")] Student student)
{
Run Code Online (Sandbox Code Playgroud)
这两者有什么区别吗?它们可以互换使用吗?何时使用其中一种?
Wik*_*hla 10
在源代码中,您可以找到InternalDbSet
's(这是抽象的具体实现DbSet
)Add
方法的实现:
public override EntityEntry<TEntity> Add(TEntity entity)
=> _context.Add(entity);
Run Code Online (Sandbox Code Playgroud)
这显然意味着,它只是一个门面过DbContext
小号Add
.
从技术上讲,这意味着两者完全相同.
归档时间: |
|
查看次数: |
1413 次 |
最近记录: |