小编Cha*_*ice的帖子

使用实体框架5的缓存查询

我知道EF 5会自动缓存查询,但是它是按照上下文还是整体来做的?我们正在使用MVC并将调用包装在using块中以处理dbcontext.例如:

public class Employee
{
    public string FirstName {get; set;}
    public string LastName {get; set;}
    public int ID {get; set;}
}

public class EmployeeQueryByFirstName : IQueryObject<Employee>
{
     private string _firstName;

     public void Set(string FirstName)
    {
         _firstName = FirstName;
    }

     public Expression<Func<Employee,bool>> AsExpression()
    {
        return (e=>e.FirstName == this._firstName);
    }
}

public class RepoExcerpt
{
    public TEntity Find<TEntity>(IQueryObject<TEntity> queryObject)
        where TEntity : class
    {
        using (var conn = ServiceLocator.IOC.Resolve<IDbContext>())
        {
            var query = (from q in conn.Set<TEntity>()
                        select q);
            query = …
Run Code Online (Sandbox Code Playgroud)

linq-to-entities caching asp.net-mvc-4 entity-framework-5

13
推荐指数
1
解决办法
7077
查看次数

从IEdmEntity映射到CLR

我试图找到一种方法从IEdmEntity到实体框架中的CLR类型.从转换到ObjectContext来获取元数据.我正在使用DataSpace.OCSpace来访问映射.我相信这是正确的,但我可能有错误的DataSpace,即使在这个博客http://blogs.msdn.com/b/alexj/archive/2009/04/之后,DataSpaces也不清楚我的脑袋里做了什么.03/tip-10-understanding-entity-framework-jargon.aspx.

最后我得到了System.Data.Entity.Core.Mapping.MappingBase对象,这些对我来说没什么用.从调试器看起来我可以访问我想要的内容,但这些类被标记为内部,我无法强制转换它们.

我是不是太难了,或者没有办法从实体框架中的IEdmModel回到它映射到的CLR类型?

添加代码以尝试使我更清楚我正在使用并尝试离开

    public Type GetIEdmEntityTypeToClrType(IEdmEntityTypeReference edmEntityType, DbContext context)
    {
        var metadata = ((IObjectContextAdapter)context).ObjectContext.MetadataWorkspace;
        var fullname = edmEntityType.EntityDefinition().FullName();

        EntityType entityType;
        if (metadata.TryGetItem(fullname, DataSpace.CSSpace, out entityType))
        {
            //doesn't hit
        }
        if (metadata.TryGetItem(fullname, DataSpace.CSpace, out entityType))
        {
            //hits but can't get access to CLR Type that it's mapped too.
        }
        if (metadata.TryGetItem(fullname, DataSpace.OCSpace, out entityType))
        {
            //doesn't hit
        }
        if (metadata.TryGetItem(fullname, DataSpace.OSpace, out entityType))
        {
            //doesn't hit
        }
        if (metadata.TryGetItem(fullname, DataSpace.SSpace, out entityType))
        {
            //doesn't hit
        } …
Run Code Online (Sandbox Code Playgroud)

.net c# entity-framework

8
推荐指数
2
解决办法
2836
查看次数

ASP.NET MVC视图在运行时的可扩展性

我们正在将我们的应用程序迁移到.NET.其中一个主要目标是允许每个客户端修改应用程序,但不允许修改源代码.我们通过编程到接口并使用依赖性解析器(具有覆盖基本注册的选项)和MEF在核心框架中解决了这个问题.

现在,当涉及到视图(客户端看到的UI)时,模板看起来是静态的,如果客户端想要在屏幕上添加新字段,那么他们似乎需要修改视图本身.

我能想到的唯一两件事就是修改viewengine的搜索路径.这将允许获取基础的副本并对其进行更改.不是很喜欢这个,因为它是代码的副本.

另一方面,我们现在正在做的是,我们创建一个类,它是输出HTML的其他对象的容器.基本上我们有一个PageObject,LabelObject,InputObject..ect,我们可以调用它们并输出HTML.由于它们是类,我们可以使用与给出切片的其余应用相同的方法.走这条路线我们真的没有使用viewengine进行渲染,只是用于组合所有部分视图.看起来有点笨重.

有没有不同的方法来实现这个目标或不同的视图引擎,我可以用来实现允许客户定制而不触及基本视图的目标?我知道HTML不是一个对象,但在处理HTML和允许自定义时,ASP.NET WebForms和ASP.NET MVC之间似乎必然存在一些东西.

c# asp.net-mvc template-engine

7
推荐指数
1
解决办法
441
查看次数

用于在库中编写同步和异步方法并使其保持干燥的模式

我正在修改库以添加异步方法.From 我应该为异步方法公开同步包装器吗?它说我不应该只是Task.Result在调用同步方法时写一个包装器.但是,我如何在异步方法和同步方法之间复制大量代码,因为我们希望在库中保留两个选项?

例如,库当前使用TextReader.Read方法.我们想要使用TextReader.ReadAsync方法的部分异步更改.由于这是库的核心,我似乎需要在同步和异步方法之间复制大量代码(希望尽可能保持代码DRY).或者,我需要重构出来的PreRead,并PostRead似乎杂乱的代码,什么TPL试图修复方法.

我正在考虑将TextReader.Read方法包装在一个Task.Return().即使它是一项任务,TPL的改进也不应该让它切换到不同的线程,我仍然可以使用异步等待大多数代码,就像正常一样.难道然后是确定有同步的包装是公正Task.Result还是Wait()

我查看了.net库中的其他示例.在StreamReader似乎复制异步与非异步之间的代码.在MemoryStream做了Task.FromResult.

还计划到处都可以添加,ConfigureAwait(false)因为它只是一个库.

更新:

我所说的重复代码是

 public decimal ReadDecimal()
 {
     do
     {
          if (!Read())
          {
               SetInternalProperies()
          }
          else
          {
               return _reader.AsDecimal();
          }
      } while (_reader.hasValue)
 }

 public async Task<decimal> ReadDecimalAsync()
 {
     do
     {
          if (!await ReadAsync())
          {
               SetInternalProperies()
          }
          else
          {
               return _reader.AsDecimal();
          }
      } while (_reader.hasValue)
  }
Run Code Online (Sandbox Code Playgroud)

这是一个小例子,但您可以看到唯一的代码更改是等待和任务.

为了说清楚,我想在库中的所有地方使用async/await和TPL进行编码,但我仍然需要使用旧的同步方法.我不仅仅是Task.FromResult() …

.net c# asynchronous task-parallel-library async-await

7
推荐指数
2
解决办法
2320
查看次数