题
是否可以使用流畅的语法或属性在属性上定义唯一约束?如果没有,有哪些解决方法?
我有一个带有主键的用户类,但我想确保电子邮件地址也是唯一的.这是否可以直接编辑数据库?
解决方案(基于马特的答案)
public class MyContext : DbContext {
public DbSet<User> Users { get; set; }
public override int SaveChanges() {
foreach (var item in ChangeTracker.Entries<IModel>())
item.Entity.Modified = DateTime.Now;
return base.SaveChanges();
}
public class Initializer : IDatabaseInitializer<MyContext> {
public void InitializeDatabase(MyContext context) {
if (context.Database.Exists() && !context.Database.CompatibleWithModel(false))
context.Database.Delete();
if (!context.Database.Exists()) {
context.Database.Create();
context.Database.ExecuteSqlCommand("alter table Users add constraint UniqueUserEmail unique (Email)");
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 是否有用于从Mobile Safari访问iPhone相机的JavaScript API?
Mono 2.10的发行说明建议使用XSP支持ASP.NET MVC 3.0和Razor.
在MonoDevelop 2.4.2(Mac OS X)中打开新创建的ASP.NET MVC 3.0默认项目(使用Visual Studio 2010创建)时,缺少以下DLL:
System.Web.Entity
System.Web.Helpers
System.Web.Mvc
System.Web.WebPages
Run Code Online (Sandbox Code Playgroud)
所有这些我都替换为从我的Windows安装中获得的DLL.项目构建,但在尝试调试项目时收到以下错误消息:
Adding applications '/:.'...
Registering application:
Host: any
Port: any
Virtual path: /
Physical path: /.../Mvc3Test/
Handling exception type TargetInvocationException
Message is Exception has been thrown by the target of an invocation.
IsTerminating is set to True
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
Run Code Online (Sandbox Code Playgroud)
在进行这些替换之前,应用程序运行但显然缺少参考错误.这表明新DLL中的某些东西搞砸了XSP服务器.
我究竟做错了什么?我太简单了吗?我是Mono和MonoDevelop的新手,但我能够成功地使用当前安装的MonoDevelop创建,构建和调试MVC 2.0项目.
我发现的所有示例都引用了一个名为ObjectContext的类,它似乎不存在于CTP5中.我必须强调,CTP5是我第一次接触实体框架.
我有一个已连接到我的DbContext的断开连接的POCO.SaveChanges不会接受更改,我如何告诉我的上下文更新该实体?
_context.Users.Attach(user);
// The user has been replaced.
_context.SaveChanges();
// The change is not saved.
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
更新12/01/2011
对于大多数人来说可能是显而易见的,但作为EF的第一次使用者,我没有想到附加已经附加的对象会清除之前的状态.这给我带来了很多痛苦.但是我想以一种非常通用的方式使用Repository模式,这种方式不关心对象是否已经附加或者是作为ASP.NET MVC绑定的结果而新创建的.所以我需要一种UpdateUser方法,我在下面附上了它.
public User UpdateUser(User user) {
if (_context.Entry(user).State == EntityState.Detached) {
_context.Users.Attach(user);
_context.Entry(user).State = EntityState.Modified;
}
return user;
}
Run Code Online (Sandbox Code Playgroud)
该方法显然假设对象以某种方式存在于数据存储中,UpdateUser毕竟它被称为.如果对象已经附加,您将受益于对象的先前状态,这反过来将允许对数据库进行优化更新.但是,如果未附加对象,则该方法会强制整个对象变脏.
现在似乎很明显,不是之前.希望它可以帮助某人.
丰富
我最近开始尝试使用jQuery模板,它依赖于你在SCRIPT标签中包装HTML的能力.
<script id="movieTemplate" type="text/x-jquery-tmpl">
<li>
<b>${Name}</b> (${ReleaseYear})
</li>
</script>
Run Code Online (Sandbox Code Playgroud)
问题是,TextMate自然地假设SCRIPT标签内的任何东西都是JavaScript.我确信TextMate可以根据type属性对内容进行不同的处理,但我正在努力解决捆绑中使用的一些语法问题.我非常有信心下面这行是关键,但我不知道从哪里开始.
begin = '(?:^\s+)?(<)((?i:script))\b(?![^>]*/>)';
Run Code Online (Sandbox Code Playgroud)
有没有人已经处理过类似的情况?有人能指出我正确的方向吗?
丰富
我目前正在学习Objective-C,并在Protocols中遇到了可选方法.我的背景是C#,可以看到一个类似于C#接口的协议.
在C#接口代表合同的地方,通过宣传一个接口,你说你将实现定义的方法.
考虑到这一点,我很困惑为什么你需要定义一个可选方法.这不是诽谤或试图减少Objective-C,我喜欢Objective-C.我只是想了解这些可选方法的好处,以便更好地理解语言.
如果有人可以提供一些可选方法有用的真实场景(带有示例代码),我真的很感激.
我们有一个在Azure App Service上运行的.NET 4.6.1 ASP.NET Web窗体应用程序.我说Web Forms,但该应用程序还包含Web Api 2,以及两个WebJob项目,每个项目执行几个任务.
我们使用StackExchange.Redis进行缓存.我们还将Redis用于SessionState.我提到这一点,因为问题始于Redis连接的建立,除非我们重新启动ASP.NET应用程序,否则它们不会死亡.我们使用Lazy模式重新传输ConnectionMultiplexer.本地测试确认连接确实在各个请求中共享.
我们对Redis配置充满信心,开始关注与ASP.NET应用程序相关的指标.线程计数反映了我们的Redis客户端图.问题是,我不知道什么是正常的线程数.但我希望他们能在几天内处理/消失/死亡.没有积累.
我们广泛使用Async/Await,但我们通常不直接处理线程.最后一行可能听起来有点幼稚,抱歉不知道怎么回事.我们倾向于在工作日看到最忙碌的时间,夜间活动最少.
我们不知所措,我们做错了什么?我是对的,我们是否应该看到线程数量下降而网站上的活动减少了?也许我已经说了一些你可以指出并说"你到底在做什么?"的东西,那就太好了.我真正追求的是对我们可能负责这些线程构建以及我们如何管理它的建议.
更新03/08
第二个图像中的线表由SUM聚合.如果将聚合更改为MIN,MAX或AVG,则会看到更合理的线程计数,它表明线程正确处理.对于网络应用来说,这显然是一个很大的缓解.
我假设,虽然我的谷歌搜索没有设法确认它,SUM表示自上次应用程序重新启动以来创建的线程总数.如果我在这个假设中是正确的,那么Web应用程序线程数的SUM与AVG Redis客户端计数相匹配的事实证实了我们最初的怀疑,即我们的连接多路复用器不仅不共享连接,它们也不会被关闭操作完成.
这是我们的Redis类,它与interweb上的其他1000个示例相同,至少据我所知:
Imports System.Configuration
Imports StackExchange.Redis
Public Class RedisCache
Private Shared ReadOnly Property LazyConnection As New Lazy(Of ConnectionMultiplexer)(Function()
Dim cacheConnection = ConfigurationManager.AppSettings("CacheConnection")
Dim multiplexer = ConnectionMultiplexer.Connect(cacheConnection.ToString())
multiplexer.PreserveAsyncOrder = False
Return multiplexer
End Function)
Public Shared ReadOnly Property Connection As ConnectionMultiplexer
Get
Return LazyConnection.Value
End Get
End Property
Public Shared ReadOnly Property UseCache As Boolean
Get
Return ConfigurationManager.AppSettings("CacheConnection") IsNot Nothing
End Get
End Property
End …Run Code Online (Sandbox Code Playgroud) 您可以为各个类型提供备用模板,但是可以覆盖包装标签,字段和验证的模板.
更改:
<div class="editor-label"><label for="Content">Content</label></div>
<div class="editor-field"><input class="text-box single-line" id="Content" name="Content" type="text" value="" /> </div>
Run Code Online (Sandbox Code Playgroud)
至:
<div class="field">
<label for="Content">Content</label>
<input class="text-box single-line" id="Content" name="Content" type="text" value="" /> </div>
Run Code Online (Sandbox Code Playgroud)
丰富
Gu提供了一个示例,说明如何创建覆盖RegularExpressionAttribute的自定义验证程序.
这样做的好处是您不必创建自定义模型验证器,但我无法使其工作.
给出以下代码:
public class NameAttribute : RegularExpressionAttribute {
public NameAttribute()
: base(@"^[\w\s\-\']+$") {
}
}
Run Code Online (Sandbox Code Playgroud)
这有效:
[RegularExpression(@"^[\w\s\-\']+$")]
Run Code Online (Sandbox Code Playgroud)
但这不是:
[Name]
Run Code Online (Sandbox Code Playgroud)
我是否误解了Scott的一个方面的例子,或者是MVC不支持派生类型开箱即用的例子,所以实际上我必须创建一个相应的ModelValidator?
我有一个Person模型,其中包含一个表示出生数据的属性 ( birth_date)。
我还有一个方法叫做age(),它计算出这个人的当前年龄。
我现在需要根据人的年龄运行查询,所以我age()在 MySQL 中复制了作为计算列的逻辑。
我无法练习如何将这个附加列作为模型的默认选择语句的一部分。
我希望能够访问年龄,就好像它是 Person 模型的本机属性一样,对它执行查询并访问我视图中的值。
这是可能的,还是在吠错树?
我以为我可以通过default_scope或定义其他字段scope,但这些方法似乎只能识别现有字段。我也尝试default_scope与attr_assessor.
我已经考虑过但不想这样做的可能解决方法:
创建一个实际的属性,调用age并通过使用回调填充。日期总是在变化,所以这显然是可靠的。
将 ActiveRecord 中的逻辑复制为age()一个范围作为 where 原因。这将实现我所需要的,但不会感觉很干。
我已经在缓存该age()方法的结果。我最感兴趣的是在 where 子句中使用该字段的能力。
必须有一种方法可以通过 SQL 定义动态字段,默认情况下我可以通过模型访问该字段。
任何帮助,将不胜感激。
富有的
更新
我尝试使用范围失败的一个例子:
default_scope :select => "*, 2 as age"
attr_accessor :age
Run Code Online (Sandbox Code Playgroud)
age 是空白的,我假设是因为范围只处理限制,而不是扩展。
asp.net-mvc ×2
code-first ×2
activerecord ×1
asp.net ×1
async-await ×1
azure ×1
camera ×1
editorfor ×1
grammar ×1
html ×1
html-helper ×1
iphone ×1
javascript ×1
mono ×1
monodevelop ×1
mysql ×1
objective-c ×1
optional ×1
protocols ×1
regex ×1
textmate ×1
validation ×1
xsp ×1