小编ck8*_*4vi的帖子

如何在实体框架中使用String属性作为主键

我是EF的新手,尝试在ETF6.0中通过代码优先方法完成我的第一步,现在我遇到了问题.

我有一个房产

[Key]
public string FooId { get; set; }
Run Code Online (Sandbox Code Playgroud)

这是我模型的主要关键.

但如果我跑了

PM>更新 - 数据库

包管理器控制台中的命令更新到数据库的挂起迁移我收到以下错误:

标识列'FooId'必须是数据类型int,bigint,smallint,tinyint或十进制或数字,标度为0,并且约束为不可空.

如果我将模型中的PK更改为

[Key]
public int FooId { get; set; } 
Run Code Online (Sandbox Code Playgroud)

一切正常.

但我需要PK为类型字符串,因为它在我的情况下绝对敏感.我知道有缺点,但对我来说这是必要的.

我在这里看到一篇较旧的帖子如何将字符串作为实体框架中的主键!.

但它似乎没有解决我的问题或我只是不理解它.

我真的不能在SQL数据库中使用字符串作为PK吗?

或者有办法做到这一点?

c# sql database entity-framework entity-framework-6

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

查找VS输出窗口中显示的Exception源

在VS2013中运行我的应用程序时,我得到例外:

mscorlib.dll中发生了'System.InvalidOperationException'类型的第一次机会异常

mscorlib.dll中发生了'System.InvalidOperationException'类型的第一次机会异常

由于我的应用程序没有崩溃,一切都正常"正常",因此可以捕获此异常.但我真的希望找到导致此异常的代码部分来解决这个问题.

我该怎么做才能找出我的代码的哪一部分抛出此异常或它发生的位置.有没有办法在VS中显示/可视化?调试器选项?

c# exception visual-studio

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

将命令绑定到ToggleButton Checked和Unchecked事件

我在我的C#WPF应用程序中有一个ToggleButton,我想将一个Command绑定到Checked事件,将一个Command绑定到Unchecked事件.

我目前的情况如下:

<ToggleButton Name="btnOpenPort" Style="{StaticResource myOnOffBtnStyle}" Content="Open Port"
              Checked="btnOpenPort_Checked" Unchecked="btnOpenPort_Unchecked"
              IsChecked="{Binding Path=PortViewModel.PortIsOpen, Mode=OneWay}"
              Canvas.Left="75" Canvas.Top="80" Height="25" Width="100"/>
Run Code Online (Sandbox Code Playgroud)

但这不是我的目标.因为在这种情况下,我必须在Checked和Unchecked事件的代码后面设置属性.相反,我想在Checked或Unchecked事件被触发后在我的ViewModel中调用一个Command(ICommand),这样我的切换按钮后面不需要任何代码.

有没有办法直接为XAML中的这两个事件绑定命令?类似于WPF中"标准"按钮控件的命令属性?

编辑 这是关于@ har07提示的工作原理:

1:如果您还没有参考,请添加参考:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions"
Run Code Online (Sandbox Code Playgroud)

2:已检查和未检查事件的已实现Interaction.Triggers:

<ToggleButton 
        Name="btnOpenPort" Style="{StaticResource myOnOffBtnStyle}" Content="Open Port"
        IsChecked="{Binding Path=PortViewModel.PortIsOpen, Mode=OneWay}"
        Canvas.Left="75" Canvas.Top="80" Height="25" Width="100">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="Checked">
                <i:InvokeCommandAction Command="{Binding Path=PortViewModel.OpenPort}"/>
            </i:EventTrigger>
            <i:EventTrigger EventName="Unchecked">
                <i:InvokeCommandAction Command="{Binding Path=PortViewModel.ClosePort}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
</ToggleButton>
Run Code Online (Sandbox Code Playgroud)

有了这个解决方案,我不必在我的ViewModel或后面的代码中更改一行代码.我可以调用我的ICommand,就像我在MVVM模式下使用标准按钮一样.

wpf xaml command togglebutton

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

Prism EventAggregator PubSubEvent <TPayload> Class与CompositePresentationEvent <TPayload> Class之间的区别

我试图让我的Prism中的EventAggregator基于这个示例MSDN工作.

在遇到混淆类引用导致的问题后,我想知道以下方面的区别:

PubSubEvent类MSDN

CompositePresentationEvent类MSDN

我找不到更详细的信息.两个引用都说定义了一个管理发布和订阅事件的类.

到现在为止还挺好.但什么时候使用它们或者它们中的哪一个?有什么不同?

也许有人可以帮我这个.

c# prism event-handling eventaggregator

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

ObservableCollection中的更改不会更新ListView

我一直在阅读董事会中的所有相关文章但我仍然无法解决我将ObservableCollection绑定到ListView时遇到的问题.

我有一个CLogEntry模型类,它基本上包装了一个字符串.

/// Model of LogEntry
public class CLogEntry:INotifyPropertyChanged
{
    /// Fields
    private string _logEntry;

    /// Property
    public string LogEntry
    {
        get { return _logEntry; }

        set
        {
            _logEntry = value;
            RaisePropertyChanged("LogEntry");
        }
    }

    /// PropertyChanged event handler
    public event PropertyChangedEventHandler PropertyChanged;

    /// Constructor
    public CLogEntry(string logEntry)
    {
        this.LogEntry = logEntry;
    }

    /// Property changed Notification        
    public void RaisePropertyChanged(string propertyName)
    {
        // take a copy to prevent thread issues
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new …
Run Code Online (Sandbox Code Playgroud)

data-binding wpf listview observablecollection

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

如何在WPF应用程序中使用App.config进行log4net配置

目前我正在研究现有控制台应用程序的WPF版本.在控制台应用程序中,我使用log4net来完成所有日志记录.因此我在App.config文件中配置了所有的appender等.在控制台应用程序中一切正常.

现在我想在我的WPF应用程序中实现相同的日志记录功能.我不得不说,我在WPF中是全新的,这是我的第一个WPF项目.我只是尝试将App.config(完全相同的)添加到我的WPF项目中,就像我在控制台应用程序中一样.但它不起作用.FileAppenders不会创建任何文件.但是编译时我也没有收到任何错误或警告.

我需要做什么才能获得与我的控制台应用程序相同的log4net日志记录功能?如何在WPF应用程序中配置log4net(Appenders)?

Thx提前

xxxxxx编辑xxxxxx

根据罗伯茨的提示,我可以解决它.我补充道

log4net.Config.XmlConfigurator.Configure()
Run Code Online (Sandbox Code Playgroud)

到我的主窗口.现在,我的日志记录与我的控制台应用程序中的日志记录完全相同.

public MainWindow()
    {
        // check if Application is already running
        // if it is running - Kill
        if (System.Diagnostics.Process.GetProcessesByName(System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location)).Length > 1) System.Diagnostics.Process.GetCurrentProcess().Kill();
        log4net.Config.XmlConfigurator.Configure(); 
        InitializeComponent();
    }
Run Code Online (Sandbox Code Playgroud)

c# wpf log4net app-config rollingfileappender

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

如何将PresentationFramework.Aero主题添加到ResourceDictionary

我想将PresentationFramework.Aero 主题添加到我的ResourceDictionary 中。ResourceDictionary 本身位于一个名为 ProjectResources 的程序集中。在此程序集中,我定义了项目的所有样式。所以这个 ResourceDictionary 被我的项目中的几个不同的程序集使用。到目前为止,它对于我定义的所有词典都运行良好。

现在我想添加 Aero 主题。但我总是遇到例外:

PresentationFramework.dll 中发生“System.Windows.Markup.XamlParseException”类型的未处理异常

内部异常:

{“无法加载文件或程序集“PresentationFramework.Aero,Culture=neutral”或其依赖项之一。系统找不到指定的文件。”:“PresentationFramework.Aero,Culture=neutral”}

ResourceDictionary 的定义如下:

<Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/ImageDefinition.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/Brushes.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/StylesLabel.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/StylesTextBox.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/StylesButton.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/StylesTabControl.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/StylesTextBox.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/StylesBorder.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/StylesListView.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/StylesWindow.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/StylesIndicator.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/StylesSearchBox.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/StylesTreeView.xaml"/>
                <ResourceDictionary Source="/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
Run Code Online (Sandbox Code Playgroud)

我还添加了对PresentationFramework.Aero.dll 的引用。

所以我不明白为什么它找不到定义的主题。这个定义有什么问题呢?除了这个定义之外,我是否还错过了其他任何能够使用主题的东西?

已解决: 正如图米尔在评论中所说。您需要设置参数

复制本地 = true

的PresentationFramework.Aero DLL。通过这样做,dll 将被复制到您的程序的根目录中,并且它将 dll.dll 文件复制到您的程序的根目录中。

c# wpf themes resourcedictionary

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

将[]括号替换为字符串

我有一个包含数字括号[]的字符串.由于此字符串表示SQL数据库的列名,因此我需要删除/替换它们.到目前为止,我通过以下方式进行:

if (stringWithBracket.Contains("[0]"))
   noBracket = data.Replace("[0]", "0");
if (stringWithBracket.Contains("[1]"))
   noBracket = data.Replace("[1]", "1");
if (stringWithBracket.Contains("[2]"))
   noBracket = data.Replace("[2]", "2");
if (stringWithBracket.Contains("[n]"))
   noBracket = data.Replace("[n]", "n");
Run Code Online (Sandbox Code Playgroud)

它工作正常,但对我来说看起来很难看,因为我必须为[1]到[20]这样做.有没有办法实现这个"更好",这意味着我的代码更少?

c# sql arrays replace

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

检查SQL Server数据库表中是否存在表或列

在SQL Server数据库中创建列或表之前,我想检查是否存在所需的表和/或列.

到目前为止,我已经四处寻找并找到了两种方法.

  1. 存储过程,我不想使用
  2. 通过使用该SqlCommand.ExecuteScalar()方法并捕获异常以确定表/列是否存在,这对我来说是一个解决方案但不是一个完美的解决方案.

是否有另一种方法来检查SQL Server中是否存在表/列?

c# sql sql-server

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

如何更改MessageBox文本内容

目前我有一个MessageBox.Show调用声明如下:

MessageBox.Show("Foo missing in configuration","Configuration Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
Run Code Online (Sandbox Code Playgroud)

我想要完成的是动态更改文本的内容.所以我做的是以下内容:

MessageBox.Show("Foo" + fooName + " missing  in configuration","Configuration Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
Run Code Online (Sandbox Code Playgroud)

其中fooName值之前设置的位置.

我只是想知道是否有办法这样做:

MessageBox.Show("Foo {0} missing in configuration", fooName, "Configuration Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
Run Code Online (Sandbox Code Playgroud)

这不是一个大问题.对我而言,如果它像上一个提案一样工作,它看起来/感觉更好.

也许有人知道实现这一目标的方法.

c# wpf messagebox

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

如何通过Linq获取List <T>中每个null项的索引

有没有办法让List中的每个对象的索引为null?

例如:

List<string> list = new List<string>() { "1", null, "2", null, "3" };
Run Code Online (Sandbox Code Playgroud)

是否有可能获得列表[1]和列表[3]为空的信息?在最好的情况下,我会得到另一个列表,为我提供所有null的索引.

c# linq list

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