小编Xce*_*led的帖子

使用Entity Framework 6和SQLite的问题

我正在尝试使用SQLite实体框架.我将问题集成到我的主应用程序中时遇到了问题,因此我从头开始进行了一些测试,完全按照http://brice-lambson.blogspot.com/2012/10/entity-framework-on-sqlite.html上的说明进行操作.

毕竟说完了,运行项目时出现以下错误:

没有为ADO.NET提供程序找到具有不变名称"System.Data.SQLite"的实体框架提供程序.确保提供程序已在应用程序配置文件的"entityFramework"部分中注册.有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=260882.

我的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" />
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <system.data>
    <DbProviderFactories>
      <add name="SQLite Data Provider"
            invariant="System.Data.SQLite"
            description="Data Provider for SQLite"
            type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
    </DbProviderFactories>
  </system.data>
  <connectionStrings>
    <add name="ChinookContext"
          connectionString=
"Data Source=|DataDirectory|Chinook_Sqlite_AutoIncrementPKs.sqlite"
          providerName="System.Data.SQLite" />
  </connectionStrings>
</configuration>
Run Code Online (Sandbox Code Playgroud)

然后我看到他关于实体框架6的帖子.虽然这不是我得到的确切错误,但我尝试通过NuGet安装他更新的提供程序.错误消失了,但取而代之的是:

无法加载文件或程序集'System.Data.SQLite.Linq,Version = 2.0.88.0,Culture = neutral,PublicKeyToken = db937bc2d44ff139'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040) …

.net c# sqlite entity-framework entity-framework-6

44
推荐指数
4
解决办法
6万
查看次数

URL的Path.Combine(第2部分)

一段时间以来,我一直在寻找一种适用于URL的Path.Combine方法.这与URL的Path.Combine类似有一个很大的区别.

我将以一个例子来说明.假设我们有一个基本网址:http://example.com/somefolder和一个文件:foo.txt.因此,完整的路径将是:http://example.com/somefolder/foo.txt.听起来很简单吧?哈.

我尝试了Uri课:Uri.TryCreate(new Uri("http://example.com/somefolder"), "foo.txt", out x);结果"http://example.com/foo.txt".

然后我尝试了Path:System.IO.Path.Combine("http://example.com/somefolder", "foo.txt");结果"http://example.com/somefolder\foo.txt"......更近,但仍然没有.

为了踢,我接着尝试了:System.IO.Path.Combine("http://example.com/somefolder/", "foo.txt")结果"http://example.com/somefolder/foo.txt".

最后一个工作,但它基本上在那时进行字符串连接.

所以我认为我有两个选择:

  • 使用Path.Combine并将所有\替换为/
  • 使用基本字符串连接

我错过了一个内置的框架方法吗?

更新:我的用例是下载一堆文件.我的代码看起来像这样:

    public void Download()
    {
        var folder = "http://example.com/somefolder";
        var filenames = getFileNames(folder);

        foreach (var name in filenames)
        {
            downloadFile(new Uri(folder + "/" + name));
        }
    }
Run Code Online (Sandbox Code Playgroud)

我不得不在Uri构造函数中使用字符串concat,并且还要检查是否需要斜杠(我在代码中省略了).

在我看来,我想要做的事情会出现很多,因为Uri类除了http之外还处理很多其他协议.

c# uri path

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

调用本机代码的C#比本机调用本机代码更快

在进行一些性能测试时,我遇到了一些我似乎无法解释的情况.

我写了以下C代码:

void multi_arr(int32_t *x, int32_t *y, int32_t *res, int32_t len)
{
    for (int32_t i = 0; i < len; ++i)
    {
        res[i] = x[i] * y[i];
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用gcc将它与测试驱动程序一起编译成单个二进制文件.我还使用gcc将它自己编译成一个共享对象,我通过p/invoke从C#调用它.目的是衡量从C#调用本机代码的性能开销.

在C和C#中,我创建等长的随机值输入数组,然后测量multi_arr运行所需的时间.在C#和CI中,使用POSIX clock_gettime()调用进行计时.我已经在调用multi_arr之前和之后定位了定时调用,因此输入准备时间等不会影响结果.我运行100次迭代并报告平均时间和最小时间.

尽管C和C#正在执行完全相同的功能,但C#在大约50%的时间内提前出现,通常是大量的.例如,对于1,048,576的len,C#的最小值为768,400 ns,而C的最小值为1,344,105.C#的平均值为1,018,865,而C的1,852,880.我在这个图中添加了一些不同的数字(记住日志标度):

在此输入图像描述

这些结果对我来说似乎非常错误,但工件在多个测试中是一致的.我检查了asm和IL来验证是否正确.比特是一样的.我不知道在这个程度上可能会影响性能.我已经把一个最小的例子再现了这里.

这些测试都是在Linux(KDE neon,基于Ubuntu Xenial)上使用dotnet-core 2.0.0和gcc 5.0.4运行的.

谁看过这个吗?

c c# performance gcc .net-core

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

Spring Cloud Zuul:仅对特定路径应用过滤器

我正在使用Spring Cloud的Zuul将一些API请求代理到一些外部服务器.代理本身运行良好,但每个服务都需要请求头中提供的(不同)令牌.

我已成功为每个应用适当标头的令牌编写了一个简单的预过滤器.但是,我现在有一个问题.即使在完成文档后,我也无法弄清楚如何使每个过滤器仅适用于正确的路径.我不想在网址随环境变化时执行网址匹配.理想情况下,我有一些方法可以在过滤器中获取路径的名称.

我的application.yml:

zuul:
  routes:
    foo:
      path: /foo/**
      url: https://fooserver.com
    bar:
      path: /bar/**
      url: https://barserver.com
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想在FooFilter.java(预过滤器)中执行类似的操作:

public bool shouldFilter() {
    return RequestContext.getCurrentContext().getRouteName().equals("foo");
}
Run Code Online (Sandbox Code Playgroud)

但我似乎无法找到任何方法来做到这一点.

java spring spring-cloud netflix-zuul spring-cloud-netflix

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

C#App的安装程序

我正在开发一个开源的C#应用​​程序.一段时间以来,我一直在使用我自己编写的基本.NET安装程序.但是,随着最近的更改,这对我来说已不再适用,因为我必须向安装程序添加大量文件 - 并且它们可能随每个版本而变化.ZIP文件也不实用.

我已经在网上做了一些检查,我看到了很多MSI,ClickOnce,自解压ZIP,以及(最有希望的)NSIS系统.它们似乎都不符合我的需求,所以我正在寻找有关使用哪个系统的建议.

我的程序的实际安装非常简单.基本上,我只需要将bin\Release目录(和所有子目录)复制到客户端的计算机上.通过在.NET安装程序中嵌入每个文件,并维护一个文件表,我一直在实现这一点.

不幸的是,我只是本地化了我的应用 我现在有30多个.resx文件(由Visual Studio编译为dll并放入MORE子目录),显然,向我的安装程序添加30多个文件夹和DLL是不切实际的.因此,为什么我在这个搜索.

还有一些其他要求:

  • 安装程序应在预定义目录中搜索指定的.exe.(我的应用程序设计为替代品)如果找不到.exe,则应提示其位置
  • 安装程序应验证"OldApp.exe.bak"是否存在.如果没有,它应该将"OldApp.exe"重命名为"OldApp.exe.bak"
  • 安装程序应更新文件.即,如果"Culture.de.dll"没有改变,安装程序将不管它.
  • 安装程序应该适用于所有.NET IDE的所有Windows版本(VS,SharpDevelop,Mono等),但不需要在其他平台上运行.
  • 构建解决方案时,应自动重新生成安装程序.换句话说,它应该可以通过"构建后"部分运行.
  • 必须能够将安装程序生成添加到源代码仓库中.这样下载我的应用程序源的任何人都可以编译安装程序.

对不起,很长的帖子,我认为最好发布更多.

.net c# installer

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

来自本机 C++ 加载的 DLL 的 C# 形式

这是从这个线程产生的一个问题: Native C++ use C# dll via proxy C++ managed dll

简而言之,我正在通过 DLL 将(我的)C# 扩展加载到本机进程中。扩展程序需要显示一个表单,以便用户可以控制它。我正在使用标准的 .NET 表单,没有 3rd 方库或任何东西,我的表单没有显示。更糟糕的是,它会挂起目标进程。它没有使用任何 CPU,所以我觉得它在等待某个函数返回,但从来没有。

同样有趣的是弹出“初始化方法”消息框,而不是“测试”消息框。我已经测试了我能想到的所有东西(STAthread、线程、DisableThreadLibraryCalls,以及不同的代码位置),直到周日。我倾向于认为这是 Win32 互操作的一些模糊细节,但我找不到任何似乎会导致这些症状的东西。

你们中的一位专家可以看看我的代码并指出问题所在吗?

/// <summary>
/// Provides entry points for native code
/// </summary>
internal static class UnmanagedExports
{
   [UnmanagedFunctionPointer(System.Runtime.InteropServices.CallingConvention.StdCall)]
   public delegate int SendRecv([MarshalAs(UnmanagedType.SafeArray)]byte[] ByteArray, UInt64 Len);

   [STAThread]
   [DllExport("Initialize", CallingConvention.StdCall)]
   public static int Initialize(IntPtr hInstance, SendRecv Send, SendRecv Recv)
   {
       return DLLinterface.Initialize(hInstance, Send, Recv);
   }

   [DllExport("Terminate", CallingConvention.StdCall)]
   public static void Terminate()
   {
       DLLinterface.Terminate();
   }
}

internal class DLLinterface
{ …
Run Code Online (Sandbox Code Playgroud)

c# c++ dll winapi

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

实体框架6和集合

我正在开发我的第一个实体框架应用程序.我正在使用EF vesion 6(来自Nuget)和.net 4.0.但是,对我来说,我遇到了一些困难,对我来说,它看起来应该非常简单.我在互联网上发现了许多相互矛盾的建议和解决方案,但在花了几天时间尝试解决问题之后,我真的很困惑,并且质疑我对实体框架的一些基本理解.我想要做的是:创建一个简单的相关实体集合,并在从父项中删除它们时自动删除它们.

以下是我在vanilla C#中对此进行建模的方法.与Microsoft示例一致,假设我们有两个类,Post和Tag,如下所示:

public class Post
{
    public string Name { get; set; }
    public string Author { get; set; }

    public ICollection<Tag> Tags { get; set; }
}

public class Tag
{
    public string Text { get; set; }
    // Possibly other properties here
}
Run Code Online (Sandbox Code Playgroud)

然后,添加标签非常简单myPost.Tags.Add(myTag),删除标签就像这样简单myPost.Tags.Remove(myTag).

现在进入实体框架的一面:我看了一下,然后想到了"外键,当然!" 但是我添加了一个FK有很多问题:标签在从帖子中删除时不会从数据库中删除,从数据库myPost.Tags加载时会有0个元素,尽管SQL资源管理器显示PostId值是正确的,等等我对一堆技巧感到困惑,比如标记Tag.PostId为一个键,手动删除标签,实际上将标签作为DbSet添加到上下文中,手动设置myTag.Post = null;(我尝试使用Lazy加载启用和禁用,为了它的价值 - 虽然如果可能,我想保持关闭)

现在(在很大程度上要归功于看似矛盾和过于复杂的例子),我很困惑和迷失.有人能告诉我我应该如何在EF中建立这种关系吗?(顺便说一下,我正在使用Code First)

解:

感谢Moho,我想出了这个结构,它完全符合我的要求:

public class Post
{
    public int Id { get; …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework

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

glDrawArrays上的OpenGL Segfaulting

我正在使用Code :: Blocks(C++)和MinGW在Windows上使用OpenGL制作游戏.所有的绘图和逻辑都很好,游戏运作完美.直到,突然之间,它没有.经过一段随机的时间,游戏Segfaults.与GL段错误一样,堆栈跟踪无益.我唯一得到的是segfault发生在供应商的OpenGL实现中.我已经在不同供应商的多张显卡上进行了测试,他们都是这样做的,所以问题出现在我的最后.

我通过gDEBugger运行程序并获得了相同的无用堆栈跟踪.大声笑.我也使用了GLIntercept,但没有任何东西跳出来.所以我开始以手动方式找到segfault(BuGLe拒绝编译......)并且基本上将跟踪消息写入日志.我把它缩小到一次调用glDrawArrays.我在互联网上做了很多工作,尝试了很多我发现的修复方法.

因为这个游戏不是为了便携而编码,所以我一直犹豫不决于在wine和valgrind中运行它.在我搞乱这个奇怪的混乱之前,如果你能查看我的代码并发现错误,我会很感激.(我确定这是显而易见的......)

(注意:为了便于阅读,我删除了所有的跟踪线)

void PlayerShip::Render()
{
    glPushMatrix(); //Save the current state

    glTranslatef(m_PosX, m_PosY, 0);
    glRotatef(vect.Rotation - 90, 0, 0, 1); //Matrixes are applied in reverse order


    double xl = m_SizeX / 2, yl = m_SizeY / 2; //Get values to add/subract to the midpoint for the corners
    glEnable(GL_TEXTURE_2D); //Redundant
    TextureManager::Inst()->BindTexture(TexIDs::Playership01); //Bind the texture

    glEnableClientState(GL_VERTEX_ARRAY); //These enables and disables are redundant here
    glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
    glDisableClientState(GL_NORMAL_ARRAY);
    glDisableClientState(GL_COLOR_ARRAY);

    GLdouble* Verts;
    Verts = new GLdouble[12] { -xl, -yl, -.5,    xl, …
Run Code Online (Sandbox Code Playgroud)

c++ opengl segmentation-fault

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

WPF 绑定设计时“预期属性”错误

我正在尝试将可观察集合绑定到 WPF DataGrid。我的属性之一是布尔值。我不喜欢 DataGrid 的 CheckboxColumn,因此我使用 TemplateColumn 推出了自己的 CheckboxColumn,并将其绑定到 DataContext 上的公共属性。该项目设计、编译和运行良好。但是,在设计器中,Visual Studio 2013 Professional 用红色强调了绑定路径。当我将鼠标悬停在它上面时,它会显示“预期属性”。奇怪的是,这不会显示在错误列表中,但滚动条上确实有红色的“错误标记”。另外,如果我使用“标准”CheckboxColumn,VS 不会显示下划线。

这是我的 DataContext 类:

sealed class Connection : IDisposable
{
    public bool Log { get; set; }

    public int HashCode { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

这是 DataGrid 的 XAML:

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Path=Connections}" SelectionMode="Single">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Path=HashCode, StringFormat={}{0:X}}" Header="ID" IsReadOnly="True" Width="50*"/>
        <DataGridTemplateColumn Header="Log">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <CheckBox HorizontalAlignment="Center" VerticalAlignment="Center" IsChecked="{Binding Path=Log, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

这是错误的屏幕截图:

错误

奇怪的是,VS 对于这个 XAML 没问题,但由于列的行为,我不想使用它: …

c# wpf xaml visual-studio-2013

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

C++ - stringstream <<"覆盖"

我正在用C++制作一个OpenGL游戏.与其他语言相比,我在C++方面相当无趣.无论如何,我为一些图像创建了一个带有"base"目录的字符串流.然后我将此stringstream作为函数参数传递给构造函数.构造函数附加图像文件名,然后尝试加载生成的路径.然而...

D:\CodeBlocks Projects\SnakeRoid\bin\Debug\Texts\ <-- before appending the filename
Ship01.tgacks Projects\SnakeRoid\bin\Debug\Texts\ <-- After.
Run Code Online (Sandbox Code Playgroud)

显然不正确!结果应为D:\ CodeBlocks Projects\SnakeRoid\bin\Debug\Texts\Ship01.tga

我的代码的相关部分:

std::stringstream concat;
std::string txtFullPath = "Path here";

...

concat.str(""); //Reset value (because it was changed in ...)
concat << texFullPath; //Restore the base path
PS = new PlayerShip(&TexMan, concat); //Call the constructor
Run Code Online (Sandbox Code Playgroud)

构造函数的代码

PlayerShip::PlayerShip(TextureManager * TexMan, std::stringstream &path)
{
    texId = 2;
    std::cout << path.str(); //First path above
    path << "Ship01.tga";
    std::cout  << path.str(); //Second - this is the messed up one
    //Do more …
Run Code Online (Sandbox Code Playgroud)

c++ std stringstream

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