小编Sup*_*JMN的帖子

AutoMapper和接口类型集合

我是AutoMapper的新手.对不起,如果这太简单了.

这是我的示例域名:

我有一个篮子.它包含食物清单.食物是香蕉或泡菜.

我有DTO镜像域中的每个类.目标:从BasketDto,将其及其内容映射到篮子.

这是失败的代码.在最后一行之后,我有一个篮子,但它充满了DTO而不是常规实体:(

class Program
{
    static void Main(string[] args)
    {
        Mapper.CreateMap<BasketDto, Basket>();
        Mapper.CreateMap<PickleDto, Pickle>();
        Mapper.CreateMap<BananaDto, Banana>();

        var dto = new BasketDto
                  {
                      Food = new List<IFood>
                             {
                                 new PickleDto { Name = "BigPickle" },
                                 new BananaDto { Name = "SmallBanana" },
                             }
                  };

        var basketFromDto = Mapper.Map<Basket>(dto);
    }
}

// Domain classes and interfaces --------------

interface IFood
{
    string Name { get; set; }
}

class Banana : IFood
{
    public string Name { get; set; } …
Run Code Online (Sandbox Code Playgroud)

mapping collections interface dto automapper

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

实体框架核心 RowVersion 列未使用 PostgreSQL 更新

我为我的实体设置了一个 RowVersion 列,但它似乎没有在创建或更新时存储任何内容。

它在 DbContext 中有这个配置OnModelCreating

 modelBuilder.Entity<Author>()
    .Property(a => a.RowVersion)
    .IsConcurrencyToken()
    .ValueGeneratedOnAddOrUpdate();
Run Code Online (Sandbox Code Playgroud)

但是,RowVersion 列始终为 NULL,即使在实体更新/创建之后也是如此。

顺便说一下,我将 PostgreSQL 与 Npgsql 库 (NuGet) 一起使用。在文档中,它说PostgreSQL 不支持添加或更新时的计算值

这是它不起作用的原因吗?

如果是这样,我们为什么要绕过这个限制?

另外,我已经测试过:

modelBuilder.Entity<Author>().Property<byte[]>("RowVersion")
    .HasColumnName(ShadowPropertiesDb.RowVersion)
    .IsRowVersion();
Run Code Online (Sandbox Code Playgroud)

它导致同样的问题。

c# postgresql concurrency entity-framework entity-framework-core

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

无法在 NavigationView MenuItemTemplate 中绑定 Icon 属性

我尝试使用 a 是NavigationView因为它看起来非常有用,但我正在努力使其与 MVVM 模式一起工作。

我在这个片段中附加了 MenuItemsSource 属性:

<Page x:Class="App5.MainPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:local="using:App5"
      ...>

    <Page.DataContext>
        <local:MainViewModel></local:MainViewModel>
    </Page.DataContext>

    <NavigationView MenuItemsSource="{Binding Items}">
        <NavigationView.MenuItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Name}" />
            </DataTemplate>
        </NavigationView.MenuItemTemplate>
    </NavigationView>
</Page>
Run Code Online (Sandbox Code Playgroud)

我得到的只是这个:

在此处输入图片说明

这很酷,但NavigationViewItem有一个Icon属性来装饰文本。

如何根据绑定到每个的项目设置图标NavigationViewItem

注意:我真的不想手动添加图标作为 的一部分,MenuItemTemplate因为它不是它应该的方式。我需要的是绑定隐式生成的NavigationViewItems.

问题是如何?

我已经尝试过这个(使用MenuItemContainerStyle),但它不起作用:

<NavigationView MenuItemsSource="{Binding Items}">
    <NavigationView.MenuItemContainerStyle>
        <Style TargetType="NavigationViewItem">
            <Setter Property="Icon" Value="{Binding Converter={StaticResource ItemToIconConverter}}" />
        </Style>
    </NavigationView.MenuItemContainerStyle>
    <NavigationView.MenuItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Name}" />
        </DataTemplate>
    </NavigationView.MenuItemTemplate>
</NavigationView>
Run Code Online (Sandbox Code Playgroud)

注意:使用下面的答案中建议的 XAML(将 aNavigationViewItem …

.net mvvm uwp windows-10-universal

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

在ReactiveUI中加入Views和ViewModel的最小值

将View及其关联的ViewModel协同工作的最低要求是什么?

当View由子视图组成时(与基于1x1或1xN基数的父级相关),ReactiveUI如何处理?就像一个带有2个子视图的视图,每个子视图都有一个ViewModel列表.

mvvm reactiveui

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

XAML解析器如何识别NameScopes?

在XAML解析的上下文中,我想知道解析器在类型定义NameScope时如何知道.

它完全依赖于INameScope接口,检查instance is INameScope

它是否依赖于布尔属性XamlType.IsNameScope?

它是两者的混合吗?

.net wpf xaml parsing

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

ListView与水平项目

我来自WPF,我不知道是否可以使ListView水平分配项目,所有附加功能,如鼠标滚轮滚动(鼠标设备)和滑动(触摸设备).

我试过这个,但它的行为与垂直行为不同.示例:我无法使用鼠标滚轮滚动.

<ListView ScrollViewer.VerticalScrollBarVisibility="Disabled"  ScrollViewer.HorizontalScrollBarVisibility="Auto" ItemsSource="{Binding Collection}" >
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal"></StackPanel>
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
</ListView>
Run Code Online (Sandbox Code Playgroud)

wpf xaml listview win-universal-app uwp

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

滚动到UWP的ListView中的新项目

我正在使用包含消息的ListView创建聊天应用程序。发送/接收新消息时,ListView应该滚动到新消息。

我正在使用MVVM,所以ListView看起来像

<ScrollViewer>
    <ItemsControl Source="{Binding Messages}" />
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

编辑:我试图使此版本在创建行为之前的周年更新之前的版本中。这是我到目前为止的内容:

public class FocusLastBehavior : Behavior<ItemsControl>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        AssociatedObject.Items.VectorChanged += ItemsOnVectorChanged;
    }

    private void ItemsOnVectorChanged(IObservableVector<object> sender, IVectorChangedEventArgs @event)
    {
        var scroll = VisualTreeExtensions.FindVisualAscendant<ScrollViewer>(AssociatedObject);
        if (scroll == null)
        {
            return;
        }

        var last = AssociatedObject.Items.LastOrDefault();

        if (last == null)
        {
            return;
        }

        var container = AssociatedObject.ContainerFromItem(last);


        ScrollToElement(scroll, (UIElement)container);
    }

    private static void ScrollToElement(ScrollViewer scrollViewer, UIElement element,
        bool isVerticalScrolling = true, bool smoothScrolling = true, float? zoomFactor = …
Run Code Online (Sandbox Code Playgroud)

.net c# xaml uwp windows-community-toolkit

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

SignalR Core 如何每 n 秒向客户端发送消息

又名“从后台服务向客户端发送消息”

我希望我的 SignalR 服务器每 n 秒更新一次仪表板。我现在正在使用这个:

public class MyHub : Hub
{
    public override Task OnConnectedAsync()
    {
        Observable.Interval(TimeSpan.FromSeconds(0.5)).Subscribe(l =>
        {
            var alt = CalcAltitude(l);
            SendMessage(alt);
        });

        return Task.CompletedTask;
    }

    private void SendMessage(double alt)
    {
        Clients.All.SendAsync("SendAction", new Status() {Altitude = alt});
    }

    private double CalcAltitude(long l)
    {
        return 100 * Math.Sin((double) l / 100) + 200;
    }
}

public class Status
{
    public double Altitude { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我的代码被执行时,它抛出一个异常说

无法访问已处置的对象

我怀疑我在这里做错了什么。

那么,及时向所有客户端发送消息的正确方法是什么?

.net c# signalr signalr-hub

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

从非标准事件创建 Observable(无 EventArgs / EventHandler)

我想为如下定义的事件创建一个 Observable:

public event Func<Exception, Task> Closed;
Run Code Online (Sandbox Code Playgroud)

我目前的代码是这样的:

Observable.FromEvent<Func<Exception, Task>, Unit>(h => hub.Closed += h, h=> hub.Closed -= h); 
Run Code Online (Sandbox Code Playgroud)

它编译正常,但它抛出这个运行时异常:

System.ArgumentException: '无法绑定到目标方法,因为其签名或安全透明度与委托类型不兼容。'

我觉得我做错了。我不习惯从不遵循 EventArgs 模式的事件中创建 observable

编辑:为了澄清起见,这是经典事件处理的完整代码:

class Program
{
    static async Task Main(string[] args)
    {
        var hub = new HubConnectionBuilder().WithUrl("http://localhost:49791/hubs/status")
            .Build();

        hub.On<Status>("SendAction", status => Console.WriteLine($"Altitude: {status.Altitude:F} m"));
        await hub.StartAsync();

        hub.Closed += HubOnClosed;

        while (true)
        {
        }
    }

    private static Task HubOnClosed(Exception arg)
    {
        Console.WriteLine("The connection to the hub has been closed");
        return Task.CompletedTask;
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# events system.reactive observable

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

EF Core 5.0 中的多对多关系是否可以配置为仅保留一个导航属性(在一侧)?

我已经使用以下代码配置了我的 DbContext(EF Core 5.0):

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<User>()
        .HasMany(p => p.Roles)
        .WithMany(p => p.Users)
        .UsingEntity<Dictionary<string, object>>("UsersToRoles",
            x => x.HasOne<Role>().WithMany().HasForeignKey("UserId"),
            x => x.HasOne<User>().WithMany().HasForeignKey("UserId"),
            x => x.ToTable("UsersToRoles"));

    modelBuilder.Entity<Role>()
        .ToTable("Roles")
        .Property(r => r.Application)
        .IsRequired();

    base.OnModelCreating(modelBuilder);
}
Run Code Online (Sandbox Code Playgroud)

问题是我不希望Role实体持有Users. 我保留它是因为 EF Core 需要它来配置多对多关系。

有没有办法创建相同的关系,但不必定义Role.Users导航属性?

.net c# many-to-many navigation-properties entity-framework-core

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