在ASP.NET的核心,您可以识别添加各种服务:AddDefaultIdentity
,AddIdentity
和AddIdentityCore
。
AddIdentity
和之间有什么区别AddIdentityCore
?
我使用 SQLite 数据库使用 .NET Core 2.2 创建了一个 ASP.NET MVC 网站。到目前为止,它运行良好。当我想将特定于 SQLite 的关键字添加到连接字符串时,问题就开始了,例如
Data Source=~\\App_Data\\MyDb.db; Version=3; DateTimeFormat=UnixEpoch; DateTimeKind=Utc
Run Code Online (Sandbox Code Playgroud)
现在我得到
不支持关键字:'版本'
我像这样注册数据库
// ConfigureServices(IServiceCollection services)
var conn = Configuration.GetConnectionString("MyDB").Replace("~", _env.ContentRootPath);
services.AddDbContext<MyDBContext>(options => options.UseSqlite(conn));
Run Code Online (Sandbox Code Playgroud)
然后 MyDBContext 有
public partial class MyDBContext : DbContext
{
public MyDBContext() { }
public SatrimonoContext(DbContextOptions<MyDBContext> options)
: base(options) { }
public virtual DbSet<Book> Book { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后我在我的页面模型中使用它
private SatrimonoContext _db;
public BookAccuracyListModel(SatrimonoContext dbContext)
{
_db = dbContext ?? throw new ArgumentNullException(nameof(dbContext));
}
Run Code Online (Sandbox Code Playgroud)
从那里我可以通过 LINQ 正常访问 …
我按照这些说明将标量函数添加到我的Entity Framework 6数据模型中. 如何使用带有linq的标量值函数实体?
但是,我无法在LINQ查询中调用该函数,尽管直接在DataContext上调用该方法也可以.
using (Entities context = new Entities()) {
// This works.
var Test1 = context.fn_GetRatingValue(8, 9, 0).FirstOrDefault();
// This doesn't work.
var Test2 = (from r in context.MediaRatings
select context.fn_GetRatingValue(r.Height, r.Depth, 0)).ToList();
}
Run Code Online (Sandbox Code Playgroud)
第二个查询抛出此错误.
LINQ to Entities does not recognize the method 'System.Data.Entity.Core.Objects.ObjectResult`1[System.Nullable`1[System.Single]] fn_GetRatingValue(System.Nullable`1[System.Single], System.Nullable`1[System.Single], System.Nullable`1[System.Single])' method, and this method cannot be translated into a store expression.
Run Code Online (Sandbox Code Playgroud)
此外,设计师正在给我这个警告
Error 6046: Unable to generate function import return type of the store function 'fn_GetRatingValue'. The store function will …
Run Code Online (Sandbox Code Playgroud) 我在ASP.NET中有一个支持JPG / PNG / GIF的图像上传表单,我认为就足够了。直到苹果推出了他们的新HEIC图像格式。如何在C#中处理呢?
搜索C#和HEIC在Google中什么都没有显示,因此似乎尚未解决该问题。
.NET Framework是否支持开箱即用的HEIC?可能不是,因为它太新了。是否有任何支持它的第三方库?我想将HEIC转换为JPG进行存储。
谢谢
我已经阅读了Options和Configuration基础知识的 Microsoft 文档,但仍然找不到在验证数据注释时将配置提取到对象中的正确方法。
我尝试过的一种方法 Startup.ConfigureServices
services.AddOptions<EmailConfig>().Bind(Configuration.GetSection("Email")).ValidateDataAnnotations();
Run Code Online (Sandbox Code Playgroud)
这“应该”允许通过在类构造函数中添加它来访问配置: (IOptions<EmailConfig> emailConfig)
但是它不起作用。
另一种方法是添加(IConfiguration configuration)
到构造函数中,但这不允许我调用ValidateDataAnnotations
.
configuration.GetSection("Email").Get<EmailConfig>();
Run Code Online (Sandbox Code Playgroud)
第一个问题:绑定和验证配置的责任属于 Startup 类还是使用它的类?如果它被多个类使用,我会说它属于 Startup;并且该类可以在具有不同配置布局的另一个项目中使用。
第二个问题:绑定和验证配置以便可以从类访问它的正确语法是什么?
第三个问题:如果我在 Startup 中通过数据注释进行验证,那么使用该配置的类会简单地假设配置是有效的,并且我不进行任何重新验证?
更新:在获得更多经验并查看我所有代码的结构后,我改变了我的方法以遵循标准模式。
以下代码确实有效...但仅在使用时对其进行验证。这可以在类库中注册,并且在使用特定服务之前不会抛出任何错误。
services.AddOptions<EmailConfig>()
.Bind(configuration.GetSection("Email"))
.ValidateDataAnnotations();
Run Code Online (Sandbox Code Playgroud)
然后,在配置中,我添加它以在启动时强制验证所需的配置值(CheckNotNull 是一个自定义扩展方法,重要的是您调用 IOptions.Value
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app?.ApplicationServices.GetService<IOptions<EmailConfig>>().Value.CheckNotNull("Config: Email");
app?.ApplicationServices.GetService<IOptions<OntraportConfig>>().Value.CheckNotNull("Config: Ontraport");
...
Run Code Online (Sandbox Code Playgroud)
然后在课堂上使用它
public class EmailService(IOptions<EmailConfig> config)
Run Code Online (Sandbox Code Playgroud) WPF 中的 MVVM 模式非常强调将 ViewModel 与 UI 完全分离,理想情况下,代码隐藏文件中什么也没有或很少。这允许将 ViewModel 重用于不同类型的界面。
Razor Pages 中的 MVVM 模式具有作为 ViewModel 的代码隐藏,并通过 OnGet 和 OnPost 方法与 Web 逻辑紧密耦合。
因此,精心设计的解耦 WPF ViewModel 不能作为 Web ViewModel(或者可以从网页 Model 中使用?)
有没有我遗漏的东西,为什么 WPF 中的 MVVM(解耦)和 Razor Pages 中的 MVVM(耦合)之间存在如此大的差异?
如果我们将 Razor Pages 方法应用于 WPF,那么代码隐藏将成为 ViewModel —— 我从未见过有人推荐过它。
如果使用 System.Text.Json 反序列化 JSON 数据,其中数据与目标模型不匹配,则会抛出 NotSupportedException 且不包含任何详细信息。
如果数据很复杂,则很难确定问题发生的位置。
有没有办法获得更多调试信息,或者关于哪个成员反序列化失败的一些提示?
编辑
这是一个示例命令
var result = await JsonSerializer.DeserializeAsync<ApiResponse<T>>(responseStream, OntraportSerializerOptions.Default, CancellationToken.None).ConfigureAwait(false);
Run Code Online (Sandbox Code Playgroud)
错误信息:
2[System.Int32,OntraportApi.Models.ResponseSectionFields]' on 'OntraportApi.Models.ApiResponse
不支持集合类型“System.Collections.Generic.Dictionary 1[System.Collections.Generic.Dictionary`2[System.Int32,OntraportApi.Models.ResponseSectionFields]].Data”。
responseStream.Length = 18494,要我粘贴吗?
我正在寻找正确的方法来声明 Avalonia 窗口的设计时 ViewModel。
一些样本表明
d:DataContext="{d:DesignInstance viewModels:LoginViewModel, IsDesignTimeCreatable=True}"
Run Code Online (Sandbox Code Playgroud)
这会抛出
XamlParseException at 5:5: Unable to resolve type DesignInstance from namespace http://schemas.microsoft.com/expression/blend/2008
Run Code Online (Sandbox Code Playgroud)
默认 Avalonia MVVM 模板建议
<Design.DataContext>
<vm:MainWindowViewModel/>
</Design.DataContext>
Run Code Online (Sandbox Code Playgroud)
如果 ViewModel 接受参数,它会抛出
XamlLoadException at 16:10: Unable to find public constructor for type Demo.CloseNonModalDialog:Demo.CloseNonModalDialog.CurrentTimeDialogViewModel()
Run Code Online (Sandbox Code Playgroud)
我想添加默认的无参数构造函数是一种选择。
使用 MvvmLight/WPF,我曾经将 ViewLocator 作为静态资源引用
DataContext="{Binding Source={StaticResource Locator}, Path=MainWindow}"
Run Code Online (Sandbox Code Playgroud)
这是一个选项,尽管我还没有找到声明和引用资源的正确方法。
这里推荐的方法是什么?如果我想显示设计时数据,我会说只有第三个选项才有效。这不是示例中显示的选项。
我有一个网格模式的 ListView,我在其中显示数据列表。网格有效,但我无法绑定 Background 属性。如果“FileExists == false”,那么我想以红色显示该行。为什么这不起作用?
该列表在 Windows.Loaded 中加载。我还将 [ImplementPropertyChanged] 属性添加到数据类(使用 NuGet PropertyChanged.Fody),但这没有帮助。
<ListView x:Name="VideosView" TabIndex="2" SelectedValuePath="VideoId" Margin="10,50,10,37" ButtonBase.Click="VideosView_ColumnHeaderClick">
<ListView.Resources>
<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<DataTrigger Binding="{Binding FileExists}" Value="False">
<Setter Property="Background" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</ListView.Resources>
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Artist, Mode=OneWay}" Header="Artist" Width="100"/>
<GridViewColumn DisplayMemberBinding="{Binding Title, Mode=OneWay}" Header="Title" Width="300"/>
<GridViewColumn DisplayMemberBinding="{Binding Length, Converter={StaticResource TimeSpanConverter}, Mode=OneWay}" Header="Length" Width="40"/>
</GridView>
</ListView.View>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<EventSetter Event="Control.MouseDoubleClick" Handler="VideosView_ItemDoubleClick"/>
</Style>
</ListView.ItemContainerStyle>
</ListView>
Run Code Online (Sandbox Code Playgroud)
数据类
[ImplementPropertyChanged]
public class VideoListItem {
public VideoListItem() {
}
public …
Run Code Online (Sandbox Code Playgroud) 我已经更新了:
...来自官方资料库
自更新以来,网站仍然可以正常运行,但是大约一两天后,一些MONO进程变得疯狂,占用了100%的CPU。我有不同的网站;大部分是纯HTML,只包含少量代码。它随机发生,并且每次都在不同的网站上发生。这是完全随机的。
然后,我收到一封有关CPU使用率过高的电子邮件警报,通过SSH进行连接,键入“ htop”,然后终止该进程,然后恢复正常……一两天。
这肯定看起来像是此MONO版本中的错误。有什么办法解决吗?还有其他人有这个问题吗?还是我应该切换到没有此损坏的其他版本?
谢谢
编辑:2天后,每个 MONO进程都占用了整个CPU。
查看Apache2日志文件,我可以找到与MONO相关的内容
WARNING: WebConfigurationManager's LRUcache evictions count reached its max size
Cache Size: 100 (overridable via MONO_ASPNET_WEBCONFIG_CACHESIZE)
Run Code Online (Sandbox Code Playgroud)
另外,“服务apache2重新启动”不能解决问题。我必须手动终止进程或重新启动。
c# ×10
.net ×4
asp.net-core ×3
asp.net-mvc ×2
mvvm ×2
wpf ×2
.net-core ×1
apache2 ×1
asp.net ×1
avaloniaui ×1
binding ×1
linq ×1
mono ×1
sql ×1
sqlite ×1
ubuntu ×1
ubuntu-16.04 ×1