小编Mir*_*rek的帖子

VS 2022 - 转换为所有文件中的文件范围命名空间

我正在将我的项目转换为 .NET 6,并且我想在任何地方使用文件作用域命名空间。但转换工具仅存在于编辑器中。

文件范围的命名空间转换

有没有人发现是否有一种方法可以同时在解决方案中的所有文件中运行此编辑器功能?(貌似Rider有这个功能)

.net c# .net-6.0 visual-studio-2022 c#-10.0

96
推荐指数
4
解决办法
3万
查看次数

实体框架中的提供者连接字符串

如果使用对象上下文数据模型(使用EDMX文件),则在创建期间可能需要在配置文件中指定连接字符串.

遗憾的是,连接字符串不是公共连接字符串,因为它包含实体连接所需的一些内容.MySql连接示例:

<add name="MyDbEntities" connectionString="metadata=res://*/Namespace.MyDb.csdl|res://*/Namespace.MyDb.ssdl|res://*/Namespace.MyDb.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=172.17.17.154;User Id=user;password=password;Persist Security Info=True;database=MyDatabase;Convert Zero Datetime=true&quot;" providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是此连接字符串包含参数"provider connection string"中提供程序的连接字符串.

出于特定原因,我需要创建一个与实体模型无关的新MySqlConnection.为了创建MySqlConnection,我需要为它提供mysql连接字符串 - 这是实体模型的提供者连接字符串,我知道我需要的连接字符串始终是实体模型的相同连接字符串.

但是如何获得提供程序连接字符串programmaticaly?我被困在浏览模型实例但没有成功......

下列:

ModelInstance.Connection.ConnectionString
Run Code Online (Sandbox Code Playgroud)

包含类似"name = TestBotEntities"的内容,甚至不包括整个连接字符串.所以我尝试过:

ConfigurationManager.ConnectionStrings["MyDbEntities"].ConnectionString
Run Code Online (Sandbox Code Playgroud)

但那个包含整个实体连接字符串,我只是不知道如何解析它,如何只从它获取提供者连接字符串.

c# entity-framework edmx objectcontext

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

C#LINQ - 将嵌套字典转换为列表

如何将嵌套字典展平为一些对象的列表(SomeObject在下面的示例中)应该包含这些字典的键?

例如:让我们有一个以下类型的字典

var nestedDictionary = new Dictionary<int, Dictionary<int, string>>();
Run Code Online (Sandbox Code Playgroud)

那么,让我们来上课吧

public class SomeObject
{
   public int var1;
   public int var2;
   public string someStringVar;
}
Run Code Online (Sandbox Code Playgroud)

如何转换nestedDictionaryList<SomeObject>where var1是外部字典var2的键,是内部字典的键,是内部字典someStringVar的字符串值?

基本上,我该如何转移:

nestedDict[0][0] = "foo";
nestedDict[0][1] = "bar";
nestedDict[0][2] = "foo1";
nestedDict[1][0] = "bar1";
nestedDict[1][1] = "foo2";
nestedDict[1][2] = "bar2";
Run Code Online (Sandbox Code Playgroud)

对此(在伪C#中只是为了可视化)

objList[0] = SomeObject { var1 = 0, var2 = 0, someStringVar = "foo" }
objList[1] = SomeObject { var1 = 0, var2 = …
Run Code Online (Sandbox Code Playgroud)

c# linq

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

ASP.NET MVC 3 EF CodeFirst - DBContext项目编辑

我一直对此感到沮丧...请帮忙.

我有一个发票部分,我可以通过使用JQuery附加/删除DOM元素来动态添加新项目...我已经找到了如何正确命名这些元素,因此它们因此正确地映射到模型并发送到action参数.

所以,假设我的控制器中有一个名为Edit with Invram类型为Invoice的动作

[HttpPost]
public virtual ActionResult Edit(Invoice invoice) {
    if (ModelState.IsValid) {
         //code discussed below
    }
    return RedirectToAction("Index");
}
Run Code Online (Sandbox Code Playgroud)

invoice参数包含我想要的所有数据.我对此没有任何问题.以下是对象模型.

public class Invoice
{
    [Key]
    public int ID { get; set; }
    public InvoiceType InvoiceType { get; set; }
    public string Description { get; set; }
    public int Amount { get; set; }
    public virtual ICollection<InvoiceItem> InvoiceItems { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

请注意InvoiceItems集合 - 它包含动态插入的发票项目的集合.以下是InvoiceItem模型

[Table("InvoiceItems")]
public class InvoiceItem
{
    [Key]
    public int ID { …
Run Code Online (Sandbox Code Playgroud)

asp.net entity-framework ef-code-first asp.net-mvc-3 dbcontext

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

OWIN中间件中的URL重写

我有一个URL重写问题,它在Global.asax中有效但在OWIN中间件中没有.

Global.asax代码

protected void Application_BeginRequest()
{
    //Perfectly working rewrite. 
    //By route rules, this resolves to the action Global()
    //of the HomeController
    HttpContext.Current.RewritePath("Home/Global");
}
Run Code Online (Sandbox Code Playgroud)

OWIN中间件代码(用于文化检测,代码缩短以简化)

public class GlobalizationMiddleware : OwinMiddleware
{
    public GlobalizationMiddleware(OwinMiddleware next)
        : base(next)
    { }

    public async override Task Invoke(IOwinContext context)
    {
        context.Request.Path = new PathString("/Home/Global");
        await Next.Invoke(context);
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望控制器"Home"的"全局"动作被调用......但是,调用默认动作"Index".

路径改变后context.Request.Uri.AbsoluteUrihttp://localhost/Global/Home

但是控制器Request.Url.AbsoluteUri仍然存在http://localhost

我甚至尝试过,context.Environment["owin.RequestPath"] = "/Home/Global";但这似乎也没有用.

在有人问之前,是的,我IAppBuilder.Use(typeof(GlobalizationMiddleware))在Startup.cs中调用,调试器进入Invoke方法.

我究竟做错了什么?

编辑

我甚至尝试引用System.Web然后这样做...也不起作用:(

System.Web.Routing.RequestContext requestContext = context.Environment["System.Web.Routing.RequestContext"] as System.Web.Routing.RequestContext; …
Run Code Online (Sandbox Code Playgroud)

c# asp.net owin asp.net-mvc-5

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

ASP.NET MVC 3使用Razor - 将条件表达式与HTML输出一起使用

多年来我一直被这个问题所困扰......(我正在研究ASP.NET MVC 3)

在这个链接 - Razor If/Else条件运算符语法 - 被认为是Razor引擎中条件表达式的唯一有效语法是@(x?y:z)

好的.现在,如何在此条件表达式中编写HTML?我不能在这里使用Razor,因为代码导致语法错误无效.

@(item.Manager == null ? @:<i>unassigned</i> : item.Manager.Name)
Run Code Online (Sandbox Code Playgroud)

经过一些研究后,我发现了HtmlWriter或Html.Raw但它们都没有,也没有它们的方法.toString()或.toHtmlString()有用,因为它们不是字符串而是IHtmlString类型.

谢谢你的答复!

asp.net-mvc razor asp.net-mvc-3

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

C# 11 - 通过反射检测所需属性

C# 11 添加了对必需属性的支持。

public class Example
{
    public required string Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何检测该属性是否按反射要求声明?

请注意,这是一个与Return a list of all required property in a class不同的问题,因为该问题是 2017 年关于自定义属性的问题,这是关于requiredC# 11 (2022) 中新增的属性关键字的问题。

PropertyInfo prop = typeof(Example).GetProperty("Value");
//bool isRequired = prop ...?
Run Code Online (Sandbox Code Playgroud)

c# c#-11.0

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

使用Ninject的WPF应用程序

我在WPF中迷失了Ninject.

我在App.xaml中初始化它,但MainWindow.xaml中的ITest属性(即使使用InjectAttribute)也没有得到解析并保持为null.

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {    
        IKernel kernel = new StandardKernel();
        kernel.Bind<ITest, Test>();
        base.OnStartup(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

我用Google搜索了一下,发现它不起作用.在试图找到一个解决方案时,我最终创建了IMainWindow,只有"void Show();" 并将其添加到MainWindow.

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {    
        IKernel kernel = new StandardKernel();
        kernel.Bind<ITest, Test>();

        kernel.Bind<IMainWindow, MySolution.MainWindow>();
        kernel.Get<IMainWindow>().Show();

        base.OnStartup(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

为此,我在.Get的行上得到NullReferenceException

我也试过这个:

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {    
        IKernel kernel = new StandardKernel();
        kernel.Bind<ITest, Test>();

        MainWindow = new MySolution.MainWindow(kernel); …
Run Code Online (Sandbox Code Playgroud)

c# wpf ninject .net-4.0

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

使用null-coalescing运算符进行隐式转换

我发现了我的程序的一个奇怪的行为,经过进一步的分析,我发现在我的C#知识或其他地方可能存在错误.我相信这是我的错,但我无法在任何地方找到答案......

public class B
{
    public static implicit operator B(A values) 
    {
        return null; 
    }
}
public class A { }

public class Program
{
    static void Main(string[] args)
    {
        A a = new A();
        B b = a ?? new B();
        //b = null ... is it wrong that I expect b to be B() ?
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码中的变量"b"被计算为null.我不明白为什么它是null.

我用谷歌搜索并在这个问题中找到了一个响应- 使用官方规范隐式转换Null-Coalescing运算符结果.

但是按照这个规范,我找不到"b"为空的原因:(也许我读错了,在这种情况下我为垃圾邮件道歉.

如果A存在且不是可空类型或引用类型,则发生编译时错误.

......事实并非如此.

如果b是动态表达式,则结果类型是动态的.在运行时,首先评估a.如果a不为null,则a将转换为dynamic,这将成为结果.否则,评估b,结果成为结果.

......事实并非如此.

否则,如果A存在且是可空类型,并且存在从b到A0的隐式转换,则结果类型为A0.在运行时,首先评估a.如果a不为null,则打开a以键入A0,这将成为结果.否则,b被评估并转换为类型A0,这就成了结果.

...存在,从b到A0的隐式转换不存在.

否则,如果A存在且从b到A存在隐式转换,则结果类型为A.在运行时,首先计算a.如果a不为null,则a成为结果.否则,b被评估并转换为类型A,这就是结果.

...存在,从b到A的隐式转换不存在.

否则,如果b具有类型B并且从a到B存在隐式转换,则结果类型为B.在运行时,首先计算a.如果a不为null,则打开a以键入A0(如果A存在且可为空)并转换为类型B,这将成为结果.否则,b被评估并成为结果.

... b具有类型B,并且从a到B存在隐式转换.a被评估为null.因此,应评估b,结果应为b.

否则,a和b不兼容,并发生编译时错误.不会发生

我错过了什么吗?

c# null implicit-conversion

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

ASP.NET Core MVC 查看组件搜索路径

在此处的文档中:https : //docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components?view=aspnetcore-2.2

运行时在以下路径中搜索视图:

/Views/{Controller Name}/Components/{View Component Name}/{View Name}
/Views/Shared/Components/{View Component Name}/{View Name}
/Pages/Shared/Components/{View Component Name}/{View Name}
Run Code Online (Sandbox Code Playgroud)

如何在此处添加另一条路径?

我想将我的视图组件及其各自的控制器放在一个名为 components 的项目文件夹中。

/Views/{Controller Name}/Components/{View Component Name}/{View Name}
/Views/Shared/Components/{View Component Name}/{View Name}
/Pages/Shared/Components/{View Component Name}/{View Name}
Run Code Online (Sandbox Code Playgroud)

我的动机:

我发现我的视图组件有自己的 JS 和 CSS 文件。我将所有 JS 捆绑并最小化在一个中site.min.js,所有 CSS 捆绑并最小化在它们的site.min.css. JS 总是类似$(function() { ... }),而 CSS 总是以一种顺序无关紧要的方式编写,因此在不知道顺序的情况下捆绑所有内容不是问题。

其中一些视图组件具有 javascripts,可以更改它们在服务器上的状态,例如对控制器操作的 AJAX 调用,该操作返回一些 JSON 或整个视图组件的 HTML。

由于控制器只是一个 C# 类,它们可以位于任何文件夹中,但是将带有相关 AJAX 操作的控制器移动到“视图”文件夹中感觉很愚蠢。

最后,我想要一个像这样的“组件”(不是真正的“视图组件”):

/Components/{View Component Name}/{View Name}
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core asp.net-core-2.2

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