2011-05-15 183 views
0

当使用EF/code-first将实体保存到数据库时,是否有一种很好的方法来执行代码?如何使用实体框架代码优先将实体持久保存到数据库时执行代码?

我在我的许多实体上有Url属性。如果URL没有得到明确,我想计算一个作为对象持久化,例如:

public void OnModelSaving() 
{ 
    // If a URL has not been specified, generate one from the name. 
    if (this.Url == null) 
    { 
     this.Url = Helper.GenerateSafeUrl(this.Title); 
    } 
} 

理想情况下,我想这一切的代码存储模型里面,但因为我没有EF拥有的基础课程/部分课程,我怀疑如果可能的话,我必须在其他地方注册/连接它。问题是 - 是否有可能,如果是这样,我该如何连接它?

回答

1

的唯一方法是重写你的背景下SaveChanges方法,通过改变实体迭代并检查Url

public override int SaveChanges() 
{ 
    var entities = ChangeTracker.Entries() 
           .Where(e => e.State == EntityState.Added || 
              e.State == EntityState.Modified) 
           .Select(e => e.Entity()) 
           .OfType<YourEntityType(); 

    foreach (var entity in entities) 
    { 
     entity.Url = ...; 
    } 

    return base.SaveChanges(); 
} 

如果你有很多的实体类型提供Url你可以尝试定义与Url通过实现界面所有实体类型和OfType都使用该接口。

+0

我有一种感觉,我需要这样做,所以我已经想过接口。我认为,而不是有一个Url的东西的接口,我会添加一个通用的,只有一个OnModelSaving方法,因此它可以用于任何实体用于任何目的。耻辱它不是内置的。谢谢! – 2011-05-15 13:19:01

相关问题