在使用Entity Framework Database First时使用生成的实体的类构造函数

时间:2013-06-30 10:48:27

标签: c# entity-framework oop entity-framework-5

我正在使用Database First,对于我的架构的每次更新,我都会更新EDMX文件并为我的模型生成新类。不幸的是,它不会生成我在数据库中指定的默认列值(例如'TimeStamp'这样的列'默认为'getdate()'。

以下是生成的Student.cs类的外观:

namespace ABC.Data
{
    using System;

    public partial class Student
    {
        public Student()
        {

        }

        public int StudentID { get; set; }
        public string Name { get; set; }
        public Nullable<System.DateTime> TimeStamp { get; set; }
    }
}

有没有办法让构造函数始终将TimeStamp设置为当前日期?我已经尝试在相同名称空间中创建一个辅助部分类,但它不起作用。也许我正在做帮手类错了。理想情况下,即使在生成新的模型类之后,我也希望辅助类保持不变。

1 个答案:

答案 0 :(得分:0)

DbContext类有一个名为ObjectMaterialized的事件,您可以将其连接到...

context.ObjectMaterialized += ObjectContext_OnObjectMaterialized

此事件处理程序可以应用默认值。

private void ObjectContext_OnObjectMaterialized(
    object sender, ObjectMaterializedEventArgs e)
{
    if (e.Entity is Student)
        (e.Entity as Student).TimeStamp = <default value>;
}

当您需要context.Set<Student>().Create()的新实例而不是新建实例时,您需要记住使用Student