小编Mic*_*ael的帖子

是否有Z.EntityFramework.Extensions的非商业替代品?

实体框架在批量插入/更新/删除操作上可能非常慢.即使是经常建议的关闭AutoDetectChanges和/或ValidateOnSaveEnabled的调整也并不总是有帮助.

我在NuGet上遇到过Z.EntityFramework.Extensions,但它似乎是一个商业产品,只能运行一段时间.

https://www.nuget.org/packages/Z.EntityFramework.Extensions/

到目前为止,我真的只需要BulkInsert(),BulkUpdate()和BulkDelete().

我的问题是:

有没有可靠的非商业库,它与Z.EntityFramework.Extensions几乎相同?

谢谢你的任何提示!

c# sql-update sql-insert entity-framework-6 sql-delete

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

WPF:无法识别或无法从XAML访问整数CLR属性

我在WPF中有一个自定义控件.我添加了两个普通的CLR属性,如下所示:

private int _ChordFrom = 0;
public int ChordFrom
{
    get { return _ChordFrom; }
    set { _ChordFrom = value; }
}

private int _ChordTo = 0;
public int ChordTo
{
    get { return _ChordTo; }
    set { _ChordTo = value; }
}
Run Code Online (Sandbox Code Playgroud)

我使用普通的CLR属性,因为我不想将这些属性绑定到任何其他依赖项.我只是想在实例化控件时在XAML中设置值.

在XAML中,属性是由intellisense找到的,但在构建项目时我得到错误:

"会员"ChordFrom"无法识别或无法访问." "会员"ChordTo"无法识别或无法访问."

XAML代码如下所示:

<TabItem Header="CHORDS I">
    <Grid x:Name="_gridChords_1" Background="AliceBlue">
        <mg:MidiChordGrid x:Name="gridMidiChordGrid_1" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"  ChordFrom="0" ChordTo="7"/>
    </Grid>
</TabItem>
Run Code Online (Sandbox Code Playgroud)

有三件事,我想知道:

  • 为什么Intellisense会向我提供XAML中的属性,如果它们不可访问?

  • 如果我关闭所有XAML窗口,重建项目,错误就会消失.

  • 即使可以在没有任何错误的情况下构建项目,也不会设置属性.

答案| 答案| 答案| 答案| 答案| 答案| 回答

感谢所有答案,但解决方案/错误在我的代码中.设置这两个CLR属性后,我忘了更新我的网格.非常遗憾.

但这里有一些你可能想知道的事实:

  • 您可以在WPF XAML中使用和设置纯CLR属性.我检查了它,属性是从XAML设置的
  • 错误"无法识别或无法访问"似乎是一个VS错误,因为该项目是可构建的 …

c# wpf clr xaml dependency-properties

5
推荐指数
0
解决办法
2293
查看次数

Pixel by Pixel Color Conversion WriteableBitmap => PNG仅黑色到具有透明度的颜色

我正在开发一个silverlight应用程序,我的所有图标都是PNG.

所有这些图标的颜色都是黑色,或者更确切地说是黑色到灰色,具体取决于alpha值.每个PNG都有透明的背景.

在我的应用程序中,我想做一个逐像素颜色从黑色或灰色变化,让我们说红色(黑色之前)或浅红色(灰色之前).

我认识到,遍历每个像素的字节,每个全黑像素的alpha值为255.灰色的那些像素值在1到254之间.α值为0似乎是透明的.黑色的RGB值均为0.

我的想法是,我改变了每个像素的颜色,但保留了alpha值,以便PNG保持原始的外观.

为此,我写了一个小函数,看起来像这样:

private static WriteableBitmap ColorChange(WriteableBitmap wbmi, System.Windows.Media.Color color)
    {
        for (int pixel = 0; pixel < wbmi.Pixels.Length; pixel++)
        {
            if (wbmi.Pixels[pixel] != 0)
            {
                byte[] colorArray   = BitConverter.GetBytes(wbmi.Pixels[pixel]);
                byte blue           = colorArray[0];
                byte green          = colorArray[1];
                byte red            = colorArray[2];
                byte alpha          = colorArray[3];

                if (alpha > 0)
                {

                    //HERE, I change the color, but keep the alpha
                    //
                    wbmi.Pixels[pixel] = Gui.Colors.ToInt.Get(color,alpha);

                    colorArray  = BitConverter.GetBytes(wbmi.Pixels[pixel]);
                    blue        = colorArray[0];
                    green       = colorArray[1];
                    red         = colorArray[2]; …
Run Code Online (Sandbox Code Playgroud)

c# alpha pixel colors writeablebitmap

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

WPF:TwoWay绑定始终更新 - OneWay绑定仅更新ONCE

我知道你的想法:2017年,请不要再提出这个,但我真的找不到任何有价值的解释.

请查看此XAML代码中的ActiveNotes属性.

我在我的XAML中有这个TwoWay绑定,它完美地运行.如果触发了ScaleNotes的PropertyChanged事件并且绑定设置为TwoWay,则它始终更新.

<c:Keyboard 
            Grid.Row="2" 
            Grid.Column="0" 
            PlayCommand="{Binding PlayCommand}" 
            StopCommand="{Binding StopCommand}" 
            ActiveNotes="{Binding ScaleNotes, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
Run Code Online (Sandbox Code Playgroud)

ViewModel中的ScaleNotes属性如下所示.每当它发生变化时,都会保证触发PropertyChanged事件.我检查并仔细检查了一下.ViewModel中的业务逻辑有效.

private ReadOnlyCollection<eNote> _ScaleNotes;
public ReadOnlyCollection<eNote> ScaleNotes
{
    get { return _ScaleNotes; }
    set { SetField(ref _ScaleNotes, value); }
}

[DebuggerStepThrough]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

[DebuggerStepThrough]
protected bool SetField<T>(ref T field, T value, [CallerMemberName] string propertyName = null)
{
    if (EqualityComparer<T>.Default.Equals(field, value)) return false;
    field = value;
    OnPropertyChanged(propertyName);
    return true;
}
Run Code Online (Sandbox Code Playgroud)

到这里一切都很好.每当更改VM中的ScaleNotes属性时,都会更新目标属性ActiveNotes.

现在的问题是: …

c# wpf xaml binding oneway

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

实体框架:一次往返执行多个命令

情况

我有许多参数化的SQL命令。我在一个循环中一个接一个地执行这些命令,如下所示:

public void SaveChanges()
{
    using (var ts = _Context.Database.BeginTransaction())
    {
        try
        {
            _Context.SaveChanges();

            foreach (var cmd in _Commands)
            {
                if (cmd.Parameter != null)
                {
                    _Context.Database.ExecuteSqlCommand(cmd.Sql, cmd.Parameter.ToArray()); 
                }
            }

            ts.Commit();
        }
        catch (Exception ex)
        {
            ts.Rollback();
            throw new Exception("SaveChanges");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码可以正常工作,事务回滚也可以正常工作。

我的命令类如下所示:

public class SqlBuilderCommand
{
    public string Sql { get; set; }

    public List<SqlParameter>  Parameter {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

没有具体解决方案的可能重复

我已经找到了这个问题的几个可能的重复。最接近的是:

可能重复1

不幸的是,它对我使用实体框架没有帮助(或者我只是不明白)

问题

  1. 是否可以一次往返执行列表中的所有命令?

  2. 如果不是,是否可以使用ADO.NET?

解决方案和缺点/局限性

感谢@Evgeni的正确答案。是的,您可以连接许多SQL字符串,并且只需一次往返就可以将参数作为列表发送。那很棒。

但是SQL-Server有一个限制。SQL-Server仅通过一个命令最多接受2100个参数。因此,如果您的对象具有7个数据库列,则每个命令的最大批量插入量为300个对象。否则,您将获得例外。

如果我对5000个对象执行此操作,则会导致17个大容量插入(5000/300)。我停止了5000个对象的时间,但仍然是8到9秒,这太慢了,因为我知道原始SQL会更快得多。

在这一点上,我认为对我而言,没有办法解决原始SQL,除非有人告诉我,有一种方法可以加快sql命令的速度。

也许我会为此写一个后续问题。该死的。

c# sql-server command entity-framework roundtrip

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

Blazor Web assembly:CSS:未应用主机变量

我正在研究 Blazor Web assembly 组件的布局。(=胖浏览器客户端,无服务器渲染)

布局如下所示并按预期工作

.grid 
{
    min-height: 100vh;
    min-width: 100vw;
    height: 100vh;
    width: 100vw;
    background-color: black;
    display: grid;
    grid-template-rows: 10px 5vh calc(90vh - 20px) 5vh 10px;
    grid-template-columns: 10px 3vw calc(94vw - 20px) 3vw 10px;
    /*Blazor Special*/
    margin: -8px;
}
Run Code Online (Sandbox Code Playgroud)
.gridCellLogo 
{
    grid-column-start: 2;
    grid-column-end: 2;
    grid-row-start: 2;
    grid-row-end: 2;
    background-color: red;
}
Run Code Online (Sandbox Code Playgroud)
<div class="grid">
    <div class="gridCellLogo">
        @*Put your component here*@
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用 CSS 变量,它们不会被应用。看看 --somecolor

:host
{
    --somecolor: green;
}

.grid {
    min-height: …
Run Code Online (Sandbox Code Playgroud)

css variables host blazor

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