相关疑难解决方法(0)

实体框架5 - 在从数据库加载实体后寻找执行自定义代码的中心点

我正在使用Entity Framework 5和Code First方法,并使用Fluent API进行实体配置.我的项目有一个特定的产品实体,它从数据库中获取一半数据,另一半来自通过WCF客户端(用于管理产品库存的第三方系统)检索的数据合同.数据合同是Product Entity类的成员(我尚未决定的属性或方法).

我不希望在实体中包含任何WCF客户端逻辑.我更喜欢将此逻辑保存在存储库代码(DbContext,DbSet等)中.

那么在从数据库中检索产品实体之后是否有一种挂钩到实体框架(或拦截)的技术?我应该注意,产品实体在其他实体上显示为导航属性.如果钩子或拦截是可能的,那么这意味着我可以在EF从数据库加载产品实体后立即从SOAP服务检索数据合同.我的项目的好处是WCF客户端检索代码不需要在整个应用程序中重复.

我的一个想法是为数据契约实现IDbSet,IDbSet将负责检索它.然后以某种方式欺骗EF认为它在产品实体上的导航属性.但我不确定数据库DbSet是否可以在同一个DbContext中与非数据库IDbSet混合.还有另外一个问题 - EF如何知道从IDbSet植入中检索导航属性?在投入时间之前,我更愿意知道这个想法是否可行.我也想知道从哪里开始寻找.

请注意我已经使用.NET超过10年,但这个EF5的东西对我来说还是比较新的.

提前致谢.

萨姆

entity-framework entity-framework-5

12
推荐指数
1
解决办法
3034
查看次数

我可以在实体框架中访问 IDbCommandInterceptor 中的实体吗

实现 IDbCommandInterceptor 时,我可以访问为命令/查询创建的 SQL 命令。是否还可以访问在实现的方法中持久/检索的实际实体对象?

这是一些幻想代码来演示我想做的事情:

public class WidgetInterceptor : IDbCommandInterceptor
{
    public void NonQueryExecuting(System.Data.Common.DbCommand command, DbCommandInterceptionContext<int> interceptionContext)
    {
        var widget = interceptionContext.Entity as Widget;

        if(widget != null)
        {
            //Perform tasks on widget before it is saved...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# sql entity-framework interceptor

5
推荐指数
1
解决办法
1781
查看次数