首先,我知道由于显而易见的原因,这不可能开箱即用.
foreach(string item in myListOfStrings) {
myListOfStrings.Remove(item);
}
Run Code Online (Sandbox Code Playgroud)
上面的剪辑是我见过的最可怕的事情之一.那么,你如何实现呢?您可以使用向后遍历列表for,但我也不喜欢这个解决方案.
我想知道的是:是否有一个方法/扩展从当前列表返回IEnumerable,类似浮动副本?LINQ有很多扩展方法可以做到这一点,但你总是要对它做一些事情,比如过滤(where,take ......).
我期待着这样的事情:
foreach(string item in myListOfStrings.Shadow()) {
myListOfStrings.Remove(item);
}
Run Code Online (Sandbox Code Playgroud)
其中.Shadow()是:
public static IEnumerable<T> Shadow<T>(this IEnumerable<T> source) {
return new IEnumerable<T>(source);
// or return source.Copy()
// or return source.TakeAll();
}
Run Code Online (Sandbox Code Playgroud)
例
foreach(ResponseFlags flag in responseFlagsList.Shadow()) {
switch(flag) {
case ResponseFlags.Case1:
...
case ResponseFlags.Case2:
...
}
...
this.InvokeSomeVoidEvent(flag)
responseFlagsList.Remove(flag);
}
Run Code Online (Sandbox Code Playgroud)
这就是我解决它的方式,它就像一个魅力:
public static IEnumerable<T> Shadow<T>(this IEnumerable<T> source) where T: new() {
foreach(T item in source)
yield return item;
} …Run Code Online (Sandbox Code Playgroud) 是否有可能创建一个重叠数据库上下文的表,以避免将数据库上下文放在库中或为相同的事情创建不同的表前缀/不同的数据库?
详细说明,这是CRM系统的一个例子.
- Pages
- Categories
- BlogEntries
- Comments
- Products
- Profiles
- Licenses
- Activations
- Invoices
- Customers
Run Code Online (Sandbox Code Playgroud)
Activation Server Context使用
- Products
- Licenses
- Activations
- Customers
Run Code Online (Sandbox Code Playgroud)
客户关系上下文使用
- Products
- Customers
- Invoices
Run Code Online (Sandbox Code Playgroud)
前端网站上下文使用
- Products
- Customers
- Invoices
- Profiles
- Pages
- Categories
- BlogEntries
- Comments
Run Code Online (Sandbox Code Playgroud)
我能想到这样做的唯一方法......
当我保存对数据库的更改时,我遇到了以下异常:
Cannot insert the value NULL into column 'Registered', table
'EIT.Enterprise.KMS.dbo.LicenseEntry'; column does not allow nulls.
INSERT fails. The statement has been terminated.
Run Code Online (Sandbox Code Playgroud)
相关代码第一个模型属性如下所示:
[DatabaseGenerated(DatabaseGeneratedOption.Identity), DataMember]
public DateTime Registered { get; private set; }
Run Code Online (Sandbox Code Playgroud)
...这就是为什么我感到困惑:据我所知,通过提供注释[DatabaseGenerated(DatabaseGeneratedOption.Identity)我正在命令实体框架自动生成字段(在这种情况下:在创建时只有一次.)
所以我期望有一个不可为空(必需)的字段,没有可能在EF处理的情况下手动改变字段.
我究竟做错了什么?
笔记:
defaultValueSql也不是一个选项,因为我需要依赖该项目的数据库(例如for GETDATE()).是否可以将对象(其属性及其值)可视化并将其打印出来(将其转储 - 类似于序列化)到WPF控件(如TreeView或PropertyGrid)以检查对象?
目标是显示任何仲裁对象的内容(不仅用于调试目的).
有关进一步说明:我不是在寻找任何调试工具或显示WPF Visual Tree的方法.这个问题只与WPF有一定关系 - > WPF只是显示对象转储的媒体,因为WPF和WinForms之间的控件可能不同.
对于嵌套对象实例,列表等,输出应该是分层的.

我想将我的应用程序安装到以下目录结构中:
MyCompany/
MyApp/
assembly1.dll
assembly2.dll
assembly3.dll
...
plugins/
plugin1.dll
plugin2.dll
Run Code Online (Sandbox Code Playgroud)
为此,我定义了以下文件夹:
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="CompanyFolder" Name="MyCompanyName">
<Directory Id="INSTALLFOLDER" Name="MyProduct">
<Directory Id="PLUGINS" Name="plugins">
<Directory Id="DATABASE_PLUGINS" Name="db" />
</Directory>
</Directory>
</Directory>
</Directory>
</Directory>
Run Code Online (Sandbox Code Playgroud)
现在我已经定义了1个功能,并引用了一个组件组.此组件组具有指向"INSTALLFOLDER"的属性"Directory".但是,当我现在在组件组中声明一个组件,该组件也具有"Directory"属性(指向DATABASE_PLUGINS)时,VS将不允许我构建设置.
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<Component Id="DB.Connector.Extension.Plugins.SqlCe" Directory="DATABASE_PLUGINS" Guid="{ae87be28-b0c9-4b3e-915f-2b4bf9965c99}">
<File Source="$(var.DB.Connector.Extension.Plugins.SqlCe.TargetDir)DB.Connector.Extension.Plugins.SqlCe.dll" KeyPath="yes" />
</Component>
</ComponentGroup>
Run Code Online (Sandbox Code Playgroud)
如何实现设置在主安装目录中创建子目录并将声明的文件放入其中?
我希望有人能够帮助我,因为我似乎完全陷入困境.
对于我们公司即将开展的项目,我们希望使用Entity Framework 5和代码优先方法.我玩了一会儿,每当我尝试在我们现有的库中使用EF时,我都失败了,因为看起来EF很大程度上依赖于现有的app.config.
在我们公司,我们有一个内部数据库库,允许我们利用MEF(托管扩展性框架)的优势连接到各种数据源和数据库技术,用于数据库提供程序.我只需要传递一些数据库设置,例如主机(或文件),目录,用户凭据和数据库提供程序名称,库会查找相应的插件并返回自定义连接字符串或IDbConnection.我们希望将此库与EF一起使用,因为它允许我们灵活地使用我们使用的数据库,并在运行时更改数据库.
所以.我看到一个典型的DbContext对象在构造函数中没有参数.它会自动在app.config中查找相应的连接字符串.我们不喜欢这样的东西所以我改变了默认构造函数来获取一个DbConnection对象,该对象被传递给DbContext基类.没有成交.
代码第一个模型更改时出现问题.EF会自动注意到这一点并查找迁移类/配置.但是:典型的迁移类需要上下文的默认无参数构造函数!太遗憾了!
因此,我们使用IDbContextFactory接口构建自己的迁移类.但同样,似乎这个IDbContextFactory也需要一个无参数构造函数,否则我无法添加迁移或更新数据库.
此外,我创建了自己的数据迁移配置程序,我传递了上下文,也是目标数据库.问题在于:无论我尝试什么,它都找不到任何迁移类.
我完全陷入困境,因为似乎使用EF的唯一方法是在app.config中保存连接字符串.这是愚蠢的,因为我们需要在运行时更改数据库连接,app.config对于默认用户是只读的!
怎么解决这个?
我有一个'factory'类,它应该比较泛型类类型参数并返回一个对象的特定实例:
public static class MyExceptionFactory<T> where T: System.Exception {
public static MyReturnObj Create() {
// return instance of MyReturnObj based on type of T
}
}
Run Code Online (Sandbox Code Playgroud)
但是我无法检查例如T是ArgumentNullException因为T是类型参数而不是变量
if(T is ArgumentNullException) // won't work
Run Code Online (Sandbox Code Playgroud)
..而且,我无法检查T的类型
if(typeof(T) is ArgumentNullException)
Run Code Online (Sandbox Code Playgroud)
因为IntelliSense告诉我T从不System.ArgumentNullException(我假设是因为T System.Exception)
我该怎么解决这个问题?我是否必须传递a的实例System.Exception以检查它的类型,或者是否有其他方法通过类类型参数执行此操作?
最近,我注意到SHA算法计算随机长度的哈希值.
HashAlgorithm provider;
provider = HashAlgorithm.Create("System.Security.Cryptography.SHA256");
while(!stackoverflow) {
Console.WriteLine(Encoding.UTF8.GetString(
provider.ComputeHash(Encoding.UTF8.GetBytes(
(new Random()).Next().ToString())))
.Count().ToString());
}
Run Code Online (Sandbox Code Playgroud)
输出:
29
29
30
29
29
30
29
31
29
29
32
29
30
28
...
Run Code Online (Sandbox Code Playgroud)
是否可以设置最大哈希长度?(可能使哈希无用..)或者我在计算哈希值时做错了什么?编码?
编辑:
上面的代码片段就是一个例子.我最终需要的是一个接受字符串的方法,计算字符串的散列并返回它.HashAlgorithm.ComputeHash取字节并返回字节,所以我使用UTF8.GetBytes()/ UTF8.GetString()进行转换,这似乎是一个巨大的错误.
我正在尝试设置pjsip,它是一个小型sip项目的python包装器.我按照这里的说明进行操作:http://trac.pjsip.org/repos/wiki/Python_SIP/Build_Install,它基本上分解为:
所需的所有命令都是
$ cd your-pjsip-root-dir
$ ./configure && make dep && make
$ cd pjsip-apps/src/python
$ sudo make
Run Code Online (Sandbox Code Playgroud)
pjsip和python包装器编译没有任何错误.但是一旦我想测试它:
XXXX@WXXXXX:~$ python
Python 2.7.3 (default, Jan 2 2013, 16:53:07)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pjsua
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named pjsua
>>>
Run Code Online (Sandbox Code Playgroud)
做什么?
(操作系统是debian wheezy,所有依赖编译和python-dev等都已安装)
在当前项目中,我使用Entity Framework 6.0 alpha3和代码优先方法.我有一个自定义数据上下文,它在构造函数中使用DbConnection来访问它的数据库.我的迁移在VisualStudio中或MigrationToLatestVersion在运行时使用初始化程序完成.
样品:
public class MyStackOverflowSampleContext : DbContext {
DbSet<Question> Questions { get; set; }
DbSet<Answers> Answers { get; set; }
public MyStackOverflowSampleContext(DbConnection connection)
: base(connection) { }
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.HasDefaultSchema("CRM");
base.OnModelCreating(modelBuilder);
}
}
Run Code Online (Sandbox Code Playgroud)
我使用以下方法检查数据库模型
if(_dbContext.Database.CompatibleWithModel())
Run Code Online (Sandbox Code Playgroud)
......在这种情况下,是假的.
如果我现在运行初始化程序并且我的数据库尚未可用,则所有内容都以它应该的方式创建并且CompatibleWithModel函数返回 - 正如预期的那样:true.
现在,出于测试目的,我稍后改变了数据库,先是稍微改变了,然后完全改变了.我删除了一列,然后是整个表甚至是_MigrationsHistory表.
但无论我做什么:_dbContext.Database.CompatibleWithModel()总是回归真实!当我尝试初始化上下文时,会发生奇怪的错误,例如:" The table TabAnswers already exists in database." - 即使它不再存在.
但是当我尝试更新以恢复我的数据库:" There are currently no pending updates..."
这是一个错误吗?