实体框架代码中的业务逻辑类型方法第一种方法类

时间:2014-01-23 19:22:35

标签: c# asp.net entity-framework ef-code-first

我想知道是否可以在使用Entity Framework 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)
    }
}

如果不可能,我应该在哪里添加它们?

提前谢谢。

3 个答案:

答案 0 :(得分:3)

当然,有一点需要注意,StudentNamePlusALetter()的值不会存储在您的数据库中(因为只有属性在那里被序列化)。

答案 1 :(得分:3)

我通常通过2个“部分”类来做到这一点。一个用于直接映射的数据库属性。一个额外的东西。

在名为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; }

}

然后在名为EmployeeExtended.cs的文件中

public partial class Employee
{
    public string EmployeeFullName
    {
        get
        {
            return string.Format("{0}, {1} ('{2}')", this.LastName, this.FirstName, this.SSN);
        }
    }


}

请注意,上面有一个readonly(“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; }

}

但是我必须在Mapping中为“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);


        }
    }
}

答案 2 :(得分:1)

扩展方法在这里也不是坏主意。