Scott Gu在他的博客文章中没有谈到这一点.在vs 2008上是否会有剃须刀的智能支持?MS通过如此频繁地发布主要升级给每个人一个艰难的时间:D
我很难让这个工作.我正在尝试使用IQueryable上的以下Filter助手进行半径搜索.在应用RadiusSearch之前,还有一组其他过滤器已应用.顺序不应该真正重要,因为目标是将查询延迟到ToList()操作.
public static IQueryable<ApiSearchCommunity> RadiusSearch(this IQueryable<ApiSearchCommunity> communities)
{
var centerLatitude = 30.421278;
var centerLongitude = -97.426261;
var radius = 25;
return communities.Select(c => new ApiSearchCommunity()
{
CommunityId = c.CommunityId,
City = c.City,
//Distance = c.GetArcDistance(centerLatitude, centerLongitude, c.Latitude, c.Longitude, radius)
});
}
Run Code Online (Sandbox Code Playgroud)
我可以以某种方式编写一个像GetArcDistance这样的帮助程序,然后在SQL上调用UDF吗?我想要生成的查询如下
SELECT
comms.community_id,
comms.city,
comms.distance
FROM (
SELECT
c.community_id,
c.city,
dbo.udf_ArcDistance(
30.421278,-97.426261,
c.community_latitude,
c.community_longitude
) AS distance
FROM communities c) AS comms
WHERE comms.distance <= 25
ORDER BY comms.distance
Run Code Online (Sandbox Code Playgroud) 我在SO上进行了搜索,看起来这个问题经常被问到.我已经能够使模拟工作,我也能够执行OnActionExecuted()而没有任何问题.这是我的单元测试.评论的行是失败的,我敢肯定我没有嘲笑正确的类型.
//Arrange
//var viewResult = new ViewResult();
var filterContextMock = new Mock<ActionExecutedContext>();
var routeData = new RouteData();
var httpContextMock = new Mock<HttpContextBase>();
routeData.Values["data"] = "Mock data";
var requestContext = new RequestContext(httpContextMock.Object, routeData);
var controller = new FakeController();
controller.ControllerContext = new ControllerContext(requestContext, controller);
filterContextMock.Setup(f => f.RouteData).Returns(routeData);
filterContextMock.Setup(f => f.Controller).Returns(controller);
//filterContextMock.Setup(f => f.Result).Returns(viewResult);
//Act
var wrapFilterAttribute = new WrapFilterAttribute();
wrapFilterAttribute.OnActionExecuted(filterContextMock.Object);
Run Code Online (Sandbox Code Playgroud)
这是我的动作过滤器.
public class WrapFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
var view = (ViewResultBase)filterContext.Result;
if (view != null)
{ …Run Code Online (Sandbox Code Playgroud) 我已经对这个问题感到震惊了一个多星期了,并且没有得到任何结果:(我们现有的遗留数据库,我正在尝试对我的实体进行建模.这些表非常臃肿,我们没有足够的用于创建新的优化表的带宽.所以我不得不使用我们已经拥有的东西.但是,我不想使用DB公开的所有冗余列.我的初步计划是在我的模型中使用Views但是看起来同样毛茸茸,只有很少的文档.
现在,用几个列选择创建模型的最佳方法是什么?我只需要一堆只读实体; 所以,如果有一种方法可以忽略架构中的非可空列,我将全部设置好.我计划使用POCO,否则我必须创建自己的映射.
更新:通过POCO,我的意思是我想使用ADO.NET POCO实体生成器.
我正在尝试使用Property Injection处理自定义操作过滤器属性.它本来应该工作,但是,我想在Property本身上使用DI.我的过滤器看起来像这样
[AttributeUsage(AttributeTargets.Class)]
public sealed class HeaderFilterAttribute : ActionFilterAttribute
{
public IMarketService MarketService
{ get; set; }
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
var view = (ViewResultBase)filterContext.Result;
if (view != null)
{
BaseViewModel viewModel = view.ViewData.Model as BaseViewModel;
if (viewModel != null)
viewModel.Header = GetHeaderScript();
}
base.OnActionExecuted(filterContext);
}
private string GetHeaderScript()
{
//Use MarketService here and return header script
return "script";
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我在BootStrapper类中使用StructureMap配置属性的方法.
//HeaderFilterAttribute
IMarketRepository marketRepository = new SqlMarketRepository();
IMarketService marketService = new MarketService(marketRepository);
ObjectFactory.Container.Configure(r => r.ForConcreteType<HeaderFilterAttribute>().
Configure.WithProperty("MarketService").
EqualTo(marketService)); …Run Code Online (Sandbox Code Playgroud)