首先在EF代码中插入/更新逻辑

jho*_*els 15 events entity-framework entity-framework-4.1

我想为插入和更新某些EF对象的事件添加一些逻辑.我有一个带有category对象的MVC应用程序,它有一个属性,它是name属性的一个slugified版本.

public class Category
{

    public string Name { get; set; }
    public string UrlName{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想仅在插入和更新事件上设置UrlName属性,因为我的slugify逻辑非常精细.

我知道我可以在上下文本身的SaveChanges()函数中添加一些逻辑,但我更愿意将代码放在实体本身附近.

有没有办法首先使用EF代码完成这样的事情?

Era*_*nga 27

您可以使用在插入和更新之前调用的方法来设置基类

public abstract class Entity
{
    public virtual void OnBeforeInsert(){}
    public virtual void OnBeforeUpdate(){}
}

public class Category : Entity
{

    public string Name { get; set; }
    public string UrlName{ get; set; }

    public override void OnBeforeInsert()
    {
       //ur logic
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在你的 DbContext

    public override int SaveChanges()
    {
        var changedEntities = ChangeTracker.Entries();

        foreach (var changedEntity in changedEntities)
        {
            if (changedEntity.Entity is Entity)
            {
                var entity = (Entity)changedEntity.Entity;

                switch (changedEntity.State)
                {
                    case EntityState.Added:
                        entity.OnBeforeInsert();
                        break;

                    case EntityState.Modified:
                        entity.OnBeforeUpdate();
                        break;

                }
            }
        }

        return base.SaveChanges();
    }
Run Code Online (Sandbox Code Playgroud)

  • @Migol,他的回答很好,因为使用接口会强制执行方法。 (2认同)