MongoDB是否有Mongoose替代品,就像我在WebMatrix 2中使用它一样,它似乎会导致它一直崩溃,但我真的很喜欢mongoose的想法,所以有替代品吗?
在使用除Web API和/或Entity Framework之外的其他技术时,我想知道BreezeJS是否兼容?因为我目前正在使用Service Stack开发SPA以检索数据和ORMLite?
所以我很好奇BreezeJS是如何处理它的,因为我知道它使用它自己的API控制器,通常具有DbContextEntity Framework使用的类的扩展.谢谢.
我有一个使用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不同.如果我不检查我的"记住我"框,那么在重新打开浏览器时我将被迫再次登录
我有一个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我应该可以使用它们吗?
我正在尝试使用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
我有一个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设计模式来防止这种情况?
我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) 我被要求为客户创建一个API.在开始之前,我有一些问题.我决定使用ASP.NET Web API技术.我已经创建了我的第一个方法,它工作正常,我能够以XML/Json格式返回一组产品结果.问题是,访问我网站上的API的任何人都可以看到我的所有产品.我已经有了一个客户数据库,如何使用它,以便在访问我的API之前,他们必须设置一些凭据.
Web和桌面客户端都应该可以访问API
我想到的一种方法是,他们将用户名/密码作为参数传递,但这似乎不太安全/对吗?例如:api/products/GetById/750?username=bob&pass=123
我有一个模型Enquiry,它可以处于两种状态之一(还有更多,但为了这个目的,我将只比较两个):New和Closed. 查询所处的状态取决于用户能够对查询进行什么操作。例如,不能删除已关闭的查询,而可以删除新查询等(基本示例)。
我想坚持这一点,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) 我有以下 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# ×4
servicestack ×3
asp.net-mvc ×2
automapper ×1
breeze ×1
jquery ×1
linq ×1
mongodb ×1
mongoose ×1
odata ×1
wcf ×1