我有这个非常恼人的问题,在Razor Views中,Enter,Backspace和导航键经常不响应.我必须重新启动VS以使其恢复正常.我错过了什么吗?
我有一个表列消息列ID(主键,自动增量)和内容(文本).
我有一个表用户名列有用户名(主键,文本)和哈希.
一个发件人(用户)向许多收件人(用户)发送邮件,收件人(用户)可以收到许多邮件.
我创建了一个包含两列的表Messages_Recipients:MessageID(引用Messages表的ID列和Recipient(引用Users表中的用户名列).此表表示收件人和邮件之间的多对多关系.
所以,我的问题是这个.在将新消息存储在数据库中之后,将创建新消息的ID.但是,我如何保存对刚刚添加的MessageRow的引用以便检索这个新的MessageID?
我总是可以在数据库中搜索最后添加的行,但是这可能会在多线程环境中返回一个不同的行?
编辑:据我所知,SQLite你可以使用SELECT last_insert_rowid().但是如何从ADO.Net中调用此声明?
我的持久性代码(messages和messagesRecipients是DataTables):
public void Persist(Message message)
{
pm_databaseDataSet.MessagesRow messagerow;
messagerow=messages.AddMessagesRow(message.Sender,
message.TimeSent.ToFileTime(),
message.Content,
message.TimeCreated.ToFileTime());
UpdateMessages();
var x = messagerow;//I hoped the messagerow would hold a
//reference to the new row in the Messages table, but it does not.
foreach (var recipient in message.Recipients)
{
var row = messagesRecipients.NewMessages_RecipientsRow();
row.Recipient = recipient;
//row.MessageID= How do I find this??
messagesRecipients.AddMessages_RecipientsRow(row);
UpdateMessagesRecipients();//method not shown
}
}
private void UpdateMessages()
{
messagesAdapter.Update(messages);
messagesAdapter.Fill(messages);
}
Run Code Online (Sandbox Code Playgroud) 我的主要解决方案是使用我自己编写的实用程序类库中的代码,但它是另一个解决方案的一部分.如何在引用的DLL文件中设置断点?
我有以下代码(数据库是SQL Server Compact 4.0):
Dim competitor=context.Competitors.Find(id)
Run Code Online (Sandbox Code Playgroud)
当我对此进行分析时,Find方法需要300 + ms才能从仅有60条记录的表中检索竞争对手.
当我将代码更改为:
Dim competitor=context.Competitors.SingleOrDefault(function(c) c.ID=id)
Run Code Online (Sandbox Code Playgroud)
然后在3毫秒内找到竞争对手.
竞争者类:
Public Class Competitor
Implements IEquatable(Of Competitor)
Public Sub New()
CompetitionSubscriptions = New List(Of CompetitionSubscription)
OpponentMeetings = New List(Of Meeting)
GUID = GUID.NewGuid
End Sub
Public Sub New(name As String)
Me.New()
Me.Name = name
End Sub
'ID'
Public Property ID As Long
Public Property GUID As Guid
'NATIVE PROPERTIES'
Public Property Name As String
'NAVIGATION PROPERTIES'
Public Overridable Property CompetitionSubscriptions As ICollection(Of CompetitionSubscription)
Public Overridable Property …Run Code Online (Sandbox Code Playgroud) entity-framework ef-code-first sql-server-ce-4 dbcontext dbset
好吧,这个让我疯了......我有一个字符串,这样就形成了:
var newContent = string.Format("({0})\n{1}", stripped_content, reply)
Run Code Online (Sandbox Code Playgroud)
newContent将显示如下:(
旧文本)
新文本
我需要一个正则表达式,用括号括起来的括号中的文本和换行符.
我能想到的最好的是:
const string regex = @"^(\(.*\)\s)?(?<capture>.*)";
var match= Regex.Match(original_content, regex);
var stripped_content = match.Groups["capture"].Value;
Run Code Online (Sandbox Code Playgroud)
这工作,但我想专门匹配换行符(\n),没有任何空格(\s)替换\s用\n \\n或\\\n无法正常工作.
请帮我保持理智!
编辑:一个例子:
public string Reply(string old,string neww)
{
const string regex = @"^(\(.*\)\s)?(?<capture>.*)";
var match= Regex.Match(old, regex);
var stripped_content = match.Groups["capture"].Value;
var result= string.Format("({0})\n{1}", stripped_content, neww);
return result;
}
Reply("(messageOne)\nmessageTwo","messageThree") returns :
(messageTwo)
messageThree
Run Code Online (Sandbox Code Playgroud) 仍然无法首先使用实体框架代码配置与ON DELETE SET NULL规则的关系.作为一种解决方法,您必须在内存中加载所有相关实体,然后在删除父实体时,EF将发出SQL命令以将其外键设置为Null.
这一点,虽然使用类似的东西自己实现这一点是微不足道的:
protected override void Seed(Context context)
{
context.Database.ExecuteSqlCommand("ALTER TABLE dbo.Guests DROP CONSTRAINT Guest_PreferredLanguage");
context.Database.ExecuteSqlCommand("ALTER TABLE dbo.Guests ADD CONSTRAINT Guest_PreferredLanguage FOREIGN KEY (LanguageID) REFERENCES dbo.Languages(LanguageID) ON UPDATE NO ACTION ON DELETE SET NULL");
}
Run Code Online (Sandbox Code Playgroud)
(例子来自这篇文章.)
我可以看到这种方法没有问题:加载的子实体将与数据库保持同步,因为EF将更新(设置为null)其外键和引用属性,并且数据库中的其他记录受到影响不会有任何危害,因为它们具有反正没装好.
那么,为什么这个功能仍然缺失呢?有一些隐藏的障碍吗?
我有一个List<T>地方T是暴露了"用户名"属性的类.用户名是封装字符串的自定义类型.我IComparable<T>在这个简单返回的自定义类型上实现了接口
this.encapsulatedString.CompareTo(other.encapsulatedString)
Run Code Online (Sandbox Code Playgroud)
我这样定义了一个ICollectionViewList:
AllUsers=CollectionViewSource.GetDefaultView(myList);
Run Code Online (Sandbox Code Playgroud)
我添加了Sortdescription:
AllUsers.SortDescriptions.Add(new SortDescription("Username",ListSortDirection.Ascending));
Run Code Online (Sandbox Code Playgroud)
在这一行,代码抛出标题中声明的异常.我可以通过其他方式排序列表没有问题.异常来自哪里?
我编写了一个简单的MSN风格的程序,它将使用WCF发送和检索消息.主窗体包含一个文本框,用于键入要发送的消息.在后台,应用程序每隔几秒钟轮询一次服务器以获取新消息.收到新消息时,将打开一个新窗口以显示该消息.这必须使用Dispatcher类在UI线程上完成.
问题是当显示新窗口时,焦点会从TextBox移开,因此打字会中断.这很烦人!在MSN Messenger中,可以在接收消息时继续键入您自己的消息.怎么做?
作为一种解决方法,我在TextBox具有焦点的同时推迟弹出新消息,但应该有更好的方法!
VB6类没有参数化构造函数.你为此选择了什么解决方案?使用工厂方法似乎是明显的选择,但让我感到惊讶!
我在SQLite 1.0.94.1的Nuget包中遇到此错误.我对各种app.config部分进行了调整,有关此软件包以前版本的类似问题的帮助,但我无法使用它.下面是我在安装Nuget包后找到的app.config.我在安装之前删除了app.config.之后我才添加了连接字符串.
那么,问题出在哪里?
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<!--Added by me, the rest of the app.config was constructed by installing the SQLite package -->
<connectionStrings>
<add name="PrivateMessengerContext" connectionString="DataSource=|DataDirectory|\PrivateMessengerDb.db" providerName="System.Data.SQLite.EF6"/>
<add name="PasswordContext" connectionString="DataSource=|DataDirectory|\PasswordDb.db" providerName="System.Data.SQLite.EF6"/>
</connectionStrings>
<system.data>
<!--
NOTE: The extra "remove" element below is to prevent the design-time
support components within EF6 from selecting the legacy ADO.NET
provider for SQLite (i.e. the one without any EF6 support). It
appears to only …Run Code Online (Sandbox Code Playgroud)