7 c# asp.net entity-framework ef-code-first
我想知道是否可以在使用实体框架代码优先方法的模型类上添加特定于域的方法。
例如,以下虚拟方法:
public class Student
{
public Student()
{
}
public int StudentID { get; set; }
public string StudentName { get; set; }
// Dummy method
public string StudentNamePlusALetter(string letter)
{
return (this.StudentName + letter)
}
}
Run Code Online (Sandbox Code Playgroud)
如果不可能,我应该在哪里添加它们?
先感谢您。
我通常通过两门“部分”课程来做到这一点。一种用于直接映射的数据库属性。一个用于额外的东西。
在名为 Employee.cs 的文件中
public partial class Employee
{
public Employee()
{
}
public System.Guid EmployeeUUID { get; set; }
public string SSN { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public System.DateTime ? CreateDate { get; set; }
public System.DateTime HireDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后在一个名为 EmployeeExtended.cs 的文件中
public partial class Employee
{
public string EmployeeFullName
{
get
{
return string.Format("{0}, {1} ('{2}')", this.LastName, this.FirstName, this.SSN);
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,在上面,我有一个只读(“get”)属性(“EmployeeFullName”),它可以与 EF 正常工作,无需更改。
我也可以这样做:
public partial class Employee
{
public string EmployeeFullName
{
get
{
return string.Format("{0}, {1} ('{2}')", this.LastName, this.FirstName, this.SSN);
}
}
public string SomeNonTrackedDatabaseProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但随后我必须在“SomeNonTrackedDatabaseProperty”的映射中添加“.Ignore”,因为它不是数据库中的列。
public class EmployeeMap : EntityTypeConfiguration<Employee>
{
public EmployeeMap()
{
// Primary Key
this.HasKey(t => t.EmployeeUUID);
this.Property(t => t.SSN)
.IsRequired()
.HasMaxLength(11);
this.Property(t => t.LastName)
.IsRequired()
.HasMaxLength(64);
this.Property(t => t.FirstName)
.IsRequired()
.HasMaxLength(64);
// Table & Column Mappings
this.ToTable("Employee");
this.Property(t => t.EmployeeUUID).HasColumnName("EmployeeUUID");
this.Property(t => t.SSN).HasColumnName("SSN");
this.Property(t => t.LastName).HasColumnName("LastName");
this.Property(t => t.FirstName).HasColumnName("FirstName");
this.Property(t => t.CreateDate).HasColumnName("CreateDate");
this.Property(t => t.HireDate).HasColumnName("HireDate");
this.Ignore(t => t.SomeNonTrackedDatabaseProperty);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3830 次 |
| 最近记录: |