小编Atr*_*gma的帖子

在迭代时从列表中删除/添加项目

首先,我知道由于显而易见的原因,这不可能开箱即用.

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)

.net c# extension-methods

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

实体框架中的表重叠数据库上下文6代码优先

是否有可能创建一个重叠数据库上下文的表,以避免将数据库上下文放在库中或为相同的事情创建不同的表前缀/不同的数据库?

详细说明,这是CRM系统的一个例子.

数据库

- Pages
- Categories
- BlogEntries
- Comments
- Products
- Profiles
- Licenses
- Activations
- Invoices
- Customers
Run Code Online (Sandbox Code Playgroud)

DB上下文

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)

解决方案

我能想到这样做的唯一方法......

  • 创建一个具有一个db上下文的库,该上下文可以解决所有表(包括迁移等) - >关注点分离?
  • 使用前缀/数据库拆分将相关表拆分到不同的上下文中 - >相关表条目不是"捆绑在一起"(我必须使用guid来避免重复,同时在一个项目中使用多个上下文)

c# sql database entity-framework

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

实体框架6代码插入时的第一个默认日期时间值

当我保存对数据库的更改时,我遇到了以下异常:

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处理的情况下手动改变字段.

我究竟做错了什么?


笔记:

  1. 我不想使用Fluent-API,因为我想使用POCO.
  2. 该属性defaultValueSql也不是一个选项,因为我需要依赖该项目的数据库(例如for GETDATE()).
  3. 我正在使用Entity Framework 6 alpha 3,Code First.

.net c# sql entity-framework

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

可视化WPF控件中的对象属性

是否可以将对象(其属性及其值)可视化并将其打印出来(将其转储 - 类似于序列化)到WPF控件(如TreeView或PropertyGrid)以检查对象?

目标是显示任何仲裁对象的内容(不仅用于调试目的).

有关进一步说明:我不是在寻找任何调试工具或显示WPF Visual Tree的方法.这个问题只与WPF有一定关系 - > WPF只是显示对象转储的媒体,因为WPF和WinForms之间的控件可能不同.

对于嵌套对象实例,列表等,输出应该是分层的.

对象可视化

.net c# wpf properties object

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

WIX ComponentGroup子目录

我想将我的应用程序安装到以下目录结构中:

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)

如何实现设置在主安装目录中创建子目录并将声明的文件放入其中?

c# windows-installer wix visual-studio

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

实体框架代码首先没有app.config

我希望有人能够帮助我,因为我似乎完全陷入困境.

对于我们公司即将开展的项目,我们希望使用Entity Framework 5和代码优先方法.我玩了一会儿,每当我尝试在我们现有的库中使用EF时,我都失败了,因为看起来EF很大程度上依赖于现有的app.config.

在我们公司,我们有一个内部数据库库,允许我们利用MEF(托管扩展性框架)的优势连接到各种数据源和数据库技术,用于数据库提供程序.我只需要传递一些数据库设置,例如主机(或文件),目录,用户凭据和数据库提供程序名称,库会查找相应的插件并返回自定义连接字符串或IDbConnection.我们希望将此库与EF一起使用,因为它允许我们灵活地使用我们使用的数据库,并在运行时更改数据库.

所以.我看到一个典型的DbContext对象在构造函数中没有参数.它会自动在app.config中查找相应的连接字符串.我们不喜欢这样的东西所以我改变了默认构造函数来获取一个DbConnection对象,该对象被传递给DbContext基类.没有成交.

代码第一个模型更改时出现问题.EF会自动注意到这一点并查找迁移类/配置.但是:典型的迁移类需要上下文的默认无参数构造函数!太遗憾了!

因此,我们使用IDbContextFactory接口构建自己的迁移类.但同样,似乎这个IDbContextFactory也需要一个无参数构造函数,否则我无法添加迁移或更新数据库.

此外,我创建了自己的数据迁移配置程序,我传递了上下文,也是目标数据库.问题在于:无论我尝试什么,它都找不到任何迁移类.

我完全陷入困境,因为似乎使用EF的唯一方法是在app.config中保存连接字符串.这是愚蠢的,因为我们需要在运行时更改数据库连接,app.config对于默认用户是只读的!

怎么解决这个?

.net c# linq entity-framework app-config

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

比较没有实例的类类型

我有一个'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以检查它的类型,或者是否有其他方法通过类类型参数执行此操作?

.net c# generics types exception

3
推荐指数
1
解决办法
1235
查看次数

SHA计算随机长度的哈希值

最近,我注意到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()进行转换,这似乎是一个巨大的错误.

c# random hash cryptography sha

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

ImportError:没有名为pjsip的模块

我正在尝试设置pjsip,它是一个小型sip项目的python包装器.我按照这里的说明进行操作:http://trac.pjsip.org/repos/wiki/Python_SIP/Build_Install,它基本上分解为:

  1. 从svn查看pjsip
  2. 编译pjsip
  3. 编译python模块

所需的所有命令都是

$ 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等都已安装)

python linux debian makefile pjsip

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

Entity Framework 6.0 Code First Migration - 模型/数据库兼容性错误?

在当前项目中,我使用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..."

这是一个错误吗?

c# database entity-framework

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