我是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) 我为我的实体设置了一个 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
我尝试使用 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 …
将View及其关联的ViewModel协同工作的最低要求是什么?
当View由子视图组成时(与基于1x1或1xN基数的父级相关),ReactiveUI如何处理?就像一个带有2个子视图的视图,每个子视图都有一个ViewModel列表.
在XAML解析的上下文中,我想知道解析器在类型定义NameScope时如何知道.
它完全依赖于INameScope接口,检查instance is INameScope?
它是否依赖于布尔属性XamlType.IsNameScope?
它是两者的混合吗?
我来自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) 我正在使用包含消息的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) 我希望我的 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)
当我的代码被执行时,它抛出一个异常说
无法访问已处置的对象
我怀疑我在这里做错了什么。
那么,及时向所有客户端发送消息的正确方法是什么?
我想为如下定义的事件创建一个 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) 我已经使用以下代码配置了我的 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
.net ×6
c# ×5
uwp ×3
xaml ×3
mvvm ×2
wpf ×2
automapper ×1
collections ×1
concurrency ×1
dto ×1
events ×1
interface ×1
listview ×1
many-to-many ×1
mapping ×1
observable ×1
parsing ×1
postgresql ×1
reactiveui ×1
signalr ×1
signalr-hub ×1