小编Cal*_*ass的帖子

猫鼬替代品?

MongoDB是否有Mongoose替代品,就像我在WebMatrix 2中使用它一样,它似乎会导致它一直崩溃,但我真的很喜欢mongoose的想法,所以有替代品吗?

mongoose mongodb

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

BreezeJS与ServiceStack?

在使用除Web API和/或Entity Framework之外的其他技术时,我想知道BreezeJS是否兼容?因为我目前正在使用Service Stack开发SPA以检索数据和ORMLite?

所以我很好奇BreezeJS是如何处理它的,因为我知道它使用它自己的API控制器,通常具有DbContextEntity Framework使用的类的扩展.谢谢.

servicestack single-page-application breeze

8
推荐指数
1
解决办法
1347
查看次数

ASP.NET MVC 3 - 处理会话变量

我有一个使用Form的身份验证的应用程序,当用户登录时,我检索用户的实际名称并将其分配给会话变量,如下所示:

[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        if (Membership.ValidateUser(model.UserName, model.Password))
        {
            Session["Name"] = client.GetName(model.UserName);
            FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
            return RedirectToAction("Index", "Home"); 
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,它会显示在我的索引视图中,如下所示:

<h3>Welcome, @Session["Name"]</h3>
Run Code Online (Sandbox Code Playgroud)

所以,如果我的名字是鲍勃,它会在我的视图中输出"欢迎,鲍勃",这很好.但是,一旦我离开页面或关闭我的浏览器并在几分钟后返回,似乎这些Session变量已被销毁,因为它只是输出"欢迎",但我仍然登录,所以我的会话没有被销毁?我在web.config中将会话设置为在60分钟后销毁:

<sessionState regenerateExpiredSessionId="true" timeout="60" />
Run Code Online (Sandbox Code Playgroud)

编辑

只有当我在登录时检查"记住我"框时才会发生这种情况,因为我猜这会保留一个cookie客户端,因此当我重新打开浏览器时我仍然登录但是创建了一个新的会话ID,因为我Response.Write(Session.SessionID)在我的我关闭浏览器之前的索引页面和ID与我重新打开它时的ID不同.如果我不检查我的"记住我"框,那么在重新打开浏览器时我将被迫再次登录

c# forms-authentication asp.net-session asp.net-mvc-3

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

无法使用oData查询选项

我有一个ASP.NET Web API项目.我试图将一些查询选项传递给我的API控制器,如下所示:

http://localhost:61736/api/Enquiries?
callback=callback&$top=30&$skip=30&orderby=EnquiryId
&$inlinecount=allpages&_=1346164698393
Run Code Online (Sandbox Code Playgroud)

但我得到以下内容:

The query parameter '$inlinecount' is not supported.

当我尝试使用时$callback,我也会得到相同的$format

知道我做错了什么吗?根据:http://msdn.microsoft.com/en-us/library/ff478141.aspx我应该可以使用它们吗?

c# odata asp.net-web-api asp.net-web-api-odata

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

ServiceStack + ORMLite +存储库模式

我正在尝试使用ORMLite实现Repository模式.我最初开始时:

public List<Todo> GetByIds(long[] ids)
{
    using (IDbConnection dbConn = dbFactory.OpenDbConnection())
    {
        return dbConn.Ids<Todo>(ids).ToList();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是在我的存储库中的每个方法下都有这个似乎有点重复?所以我创建了一个数据上下文类,我的所有存储库都继承自:

public class TodoRepository : DataContext
Run Code Online (Sandbox Code Playgroud)

这是DataContext班级:

public class DataContext
{
    protected OrmLiteConnectionFactory dbFactory = new 
OrmLiteConnectionFactory(ConfigurationManager.ConnectionStrings["AppDb"].
ConnectionString, SqlServerOrmLiteDialectProvider.Instance);

    protected IDbConnection dbConn;

    public DataContext()
    {
        dbConn = dbFactory.OpenDbConnection();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,我只需要在我的方法中执行此操作:

public List<Todo> GetByIds(long[] ids)
{
    return dbConn.Ids<Todo>(ids).ToList();
}
Run Code Online (Sandbox Code Playgroud)

我很好奇这是一个很好的设计模式,以及在使用Repository模式进行ORMLite数据访问时还有其他的设计模式.

design-patterns repository-pattern servicestack ormlite-servicestack

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

防止双重提交

我有一个ASP.NET MVC 3应用程序,它有一个名为的post post Create:

[HttpPost]
public virtual ActionResult Create(Issues issues)
{
    if (ModelState.IsValid)
    {
        context.Issues.Add(issues);
        context.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(issues);
}
Run Code Online (Sandbox Code Playgroud)

如果我错误地双击提交按钮,它将创建2x问题.有没有办法防止这种情况,没有使用javascript和禁用按钮,我认为使用a的全部用途RedirectToAction是通过使用Post/Redirect/Get设计模式来防止这种情况?

c# asp.net-mvc jquery asp.net-mvc-3

6
推荐指数
2
解决办法
7949
查看次数

超时已过期. - 在ServiceStack服务中使用Db

Db在ServiceStack服务中使用该属性来访问我的数据库,但我偶尔会从IIS中收到以下错误:

Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.

堆栈跟踪:

[InvalidOperationException: Timeout expired.  The timeout period elapsed prior to obtaining a connection from the pool.  This may have occurred because all pooled connections were in use and max pool size was reached.]
   System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +6371713
   System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +6372046
   System.Data.SqlClient.SqlConnection.Open() +300
   ServiceStack.OrmLite.OrmLiteConnection.Open() +44
   ServiceStack.OrmLite.OrmLiteConnectionFactory.OpenDbConnection() …
Run Code Online (Sandbox Code Playgroud)

servicestack ormlite-servicestack

6
推荐指数
1
解决办法
1400
查看次数

ASP.NET Web API问题 - 授权/认证

我被要求为客户创建一个API.在开始之前,我有一些问题.我决定使用ASP.NET Web API技术.我已经创建了我的第一个方法,它工作正常,我能够以XML/Json格式返回一组产品结果.问题是,访问我网站上的API的任何人都可以看到我的所有产品.我已经有了一个客户数据库,如何使用它,以便在访问我的API之前,他们必须设置一些凭据.

Web和桌面客户端都应该可以访问API

我想到的一种方法是,他们将用户名/密码作为参数传递,但这似乎不太安全/对吗?例如:api/products/GetById/750?username=bob&pass=123

model-view-controller wcf asp.net-mvc-3 asp.net-web-api

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

实体框架的状态模式

我有一个模型Enquiry,它可以处于两种状态之一(还有更多,但为了这个目的,我将只比较两个):NewClosed. 查询所处的状态取决于用户能够对查询进行什么操作。例如,不能删除已关闭的查询,而可以删除新查询等(基本示例)。

我想坚持这一点,Entity Framework但不确定如何。下面是我的代码。

询问:

public class Enquiry
{
    public int Id { get; set; }
    public string CustomerAccountNumber { get; set; }

    public EnquiryState CurrentState { get; set; }
    public bool CanAddLines { get { return CurrentState.CanAddLines; } }
    public bool CanDelete { get { return CurrentState.CanDelete; } }

    public void ChangeState(EnquiryState currentState)
    {
        CurrentState = currentState;
    }

    public void CloseEnquiry()
    {
        CurrentState.CloseEnquiry();
    }

    /* More methods to change state here …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc design-patterns entity-framework state-pattern

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

AutoMapper ProjectTo:不使用嵌套对象

我有以下 dto:

public class SingleForm
{
    // other props left out for brevity

    public List<Filter> Filters { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用 AutoMapper 映射它,如下所示:

CreateMap<Form, SingleForm>()
    .ForMember(dest => dest.Filters, 
        opts => opts.MapFrom(src => 
            Mapper.Map<List<Filter>>(src.Questions)));

CreateMap<FormQuestion, Filter>()
    .ForMember(dest => dest.Header, 
        opts => opts.MapFrom(src => src.Question.QuestionText));
Run Code Online (Sandbox Code Playgroud)

然后我使用 ProjectTo:

var query = this.context.Forms
    .Where(e => e.Id == message.FormId)
    .ProjectTo<SingleForm>()
    .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

但是,当我执行查询时,我的过滤器集合为空。

当我尝试使用 LINQ 手动映射集合时,如下所示,它工作正常,所以我想知道我是否做错了什么?

var query = this.context.Forms
    .Where(e => e.Id == message.FormId)
    .Select(e => new SingleForm
    {
        Id = e.Id,
        Filters = …
Run Code Online (Sandbox Code Playgroud)

c# linq automapper

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