如何使用Entity Framework实现业务逻辑?

时间:2017-07-10 20:52:39

标签: c# entity-framework generics

我想为我的Entity Framework创建的类实现业务逻辑。

但我无法弄清楚如何做到这一点。

这是我到目前为止所做的:

我有以下扩展名:

public static class PropertyExtension
{
    public static void SetPropertyValue(this object obj, string propName, object value)
    {
        obj.GetType().GetProperty(propName).SetValue(obj, value, null);
    }

    public static object GetPropValue(this object obj, string propertyName)
    {
        var property = obj.GetType().GetRuntimeProperties().FirstOrDefault(p => string.Equals(p.Name, propertyName, StringComparison.OrdinalIgnoreCase));
        return property != null ? property.GetValue(obj) : null;
    }
}

其次,我有Entity Framework创建的类:

public  partial class ADMIN_PANEL 
 {
    public int AP_REFNO { get; set; }
    public string AP_NAME { get; set; }
    public string AP_PASSWORD { get; set; }
    public Nullable<System.DateTime> AP_LAST_LOGIN { get; set; }
    public Nullable<System.DateTime> AP_UPDATEDATE { get; set; }         
 }   

我有我创建的部分课程

public bool isEmpty { get { return count == 0; } }
    public int count { get { return _adminPanelArgs.count; } }

    //END PROPERTIES

    #region Constructors
    public ADMIN_PANEL()
    {
        OnFillCompleteHandler += ADMIN_PANELBO_OnFillCompleteHandler;
    }
    #endregion

    void ADMIN_PANELBO_OnFillCompleteHandler(object sender, OnFillArgs e)
    {
        foreach (var propertyInfo in e.ADMIN_PANEL[0].GetType().GetProperties().Where(x => x.CanWrite == true))
        {
            this.SetPropertyValue(propertyInfo.Name, e.ADMIN_PANEL.First().GetPropValue(propertyInfo.Name));
        }
    }

    public void MyFillAll()
    {
        using (var lobo = new GymProEntities())
        {                         
                _adminPanelArgs.ADMIN_PANEL = lobo.ADMIN_PANEL.ToList();
                OnOnFillCompleteHandler(_adminPanelArgs);                           
        }
    }
}

请忽略任何未获批准的方法,我只想表明我的观点。

我想要做的是:拥有另一个BusinessLayer类,将MyFillAll方法移入其中,并使我的ADMIN_PANEL.cs类继承它。我怎么做?这甚至可能吗?

1 个答案:

答案 0 :(得分:0)

您可以创建一个域层,您可以在其中拥有所有业务逻辑并将实体作为参数传递

public class MyDomainService:IMyDomainService
{
    public void MyFillAll(Admin_Panel adminPanel)
    {
        using (var lobo = new GymProEntities())
        {                         
                _adminPanelArgs.ADMIN_PANEL = lobo.ADMIN_PANEL.ToList();
                OnOnFillCompleteHandler(_adminPanelArgs);                           
        }
    }
}

我还建议使用DI框架注入lobo