Entity Framework筆記
最近研究 Entity Framework 直接使用 SQL 語法的方法,順便做了筆記。
Model 的宣告要注意欄位是否允許 null,以北風資料庫為例,Employee 的宣告如下:
public class Employee
{
public int? EmployeeID { get; set; }
public string? LastName { get; set; } = string.Empty;
public string? FirstName { get; set; } = string.Empty;
public string? Title { get; set; } = string.Empty;
public string? TitleOfCourtesy { get; set; } = string.Empty;
public DateTime? BirthDate { get; set; }
public DateTime? HireDate { get; set; }
public string? Address { get; set; } = string.Empty;
public string? City { get; set; } = string.Empty;
public string? Region { get; set; } = string.Empty;
public string? PostalCode { get; set; } = string.Empty;
public string? Country { get; set; } = string.Empty;
public string? HomePhone { get; set; } = string.Empty;
public string? Extension { get; set; } = string.Empty;
public byte[]? Photo { get; set; }
public string? Notes { get; set; } = string.Empty;
public int? ReportsTo { get; set; }
public string? PhotoPath { get; set; } = string.Empty;
}
db context 的宣告:
public partial class BaseDbContext : DbContext
{
public DbSet<Employee> Employees { get; set; }
private string _connectionStr { get; set; } = string.Empty;
public BaseDbContext()
{
_connectionStr = Tools.DBTools.ConnectionString;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(_connectionStr);
}
}
直接執行 SQL:
var list = Context.Employees.FromSqlRaw("select * from Employees;");
lambda function:
public Employee? GetById(int id)
{
Employee? emp = Context.Employees.Where(e => e.EmployeeID == id).FirstOrDefault();
return emp;
}
LINQ:
public Employee? GetEmployee(int id)
{
Employee? emp = (from e in Context.Employees
where e.EmployeeID == id
select e).FirstOrDefault();
return emp;
}
新增及查詢單筆:
public void Add(Employee emp)
{
Context.Employees.Add(emp);
Context.SaveChanges();
}
public Employee? GetSingle(Func<Employee?, bool> predicate)
{
return Context.Employees.SingleOrDefault(predicate);
}
參考資料