小编Akh*_*hil的帖子

多接口的依赖注入

我只是学习接口隔离原理.但是在学习之后我对示例中的场景感到困惑.

这个概念是将接口分成简单的接口.那很好,但我的问题是层次结构模型与否?

以我在书中研究的例子为例.

我有一个产品接口具有以下属性

public interface IProduct
{
decimal Price { get; set; }
decimal WeightInKg { get; set; }
int Stock { get; set; }
int Certification { get; set; }
int RunningTime { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我只是简化了界面中的一个类implmentation

public class DVD : IProduct
{
public decimal Price { get; set; }
public decimal WeightInKg { get; set; }
public int Stock { get; set; }
public int Certification { get; set; }
public int RunningTime { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection interface

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

在MVC中添加脚本

我从第一个MVC应用程序开始.在这里,我有基本的困惑.实际上,默认的_Layout.cshtml文件创建如下

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")

</head>
<body>
    <script>

    </script>
    @RenderBody()

    @Scripts.Render("~/bundles/jquery")
    @RenderSection("scripts", required: false)
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我使用了基本模板,因此没有任何模板.但请检查'@ Scripts.Render("〜/ bundles/jquery")'行.它在@RenderBody()之后.所以它实际上是在身体部分之后添加的.

我认为这实际上是最好的做法.但如果我添加$.(文档).ready它会显示以下错误

Microsoft JScript运行时错误:'$'未定义

基于错误,它因脚本标记而异.我刚刚在@Render身体和最后一页之前移动了@@ Scripts.Render("〜/ bundles/jquery")'行

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")
    @Scripts.Render("~/bundles/jquery")

</head>
<body>
    <script>

    </script>
    @RenderBody()      
    @RenderSection("scripts", required: false)
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

applicationw适用于我的jquery.

那么为什么会这样呢?所以在@RenderBody之前总是需要添加标签的脚本吗?那为什么默认模板显示在错误的位置?

asp.net-mvc jquery asp.net-mvc-4

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

MySQL数据提供程序未在实体数据模型向导中显示

我正在用MySQL作为后端创建一个MVC应用程序.我打算使用Entity Framework来处理这个数据库.我已经有了一个数据库,所以需要从数据库中生成模型

环境:

MySQL Server 5.7.21 MySQL for Visual Studio 1.27 Connector/NET 6.10.5 Visual Studio 2015

重现问题:

步骤1:添加新项目"Ado.net实体数据模型"步骤2:从数据库中选择"EF Designer"并单击"下一步"步骤3:单击"新建连接"

没有可用的mysql连接器.

其他详情:

  1. 我已经添加了"System.Runtime"交易,因为它在安装Mysql时显示错误.数据.来自金块的Ef6
  2. 我在'系统中更改了"CopyLocal = true".数据'汇编参考
  3. 我在Visual Studio 2017中尝试了相同的步骤.在这里我可以在步骤3中看到提供程序,但是在单击确定对话框后关闭而不是显示表列表

在Visual Studio 2015和17初始时间,它显示提供程序.当我下次尝试时它没有显示请帮忙.我正在检查这2天

mysql entity-framework visual-studio-2015

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

ASP.NET Identity Token Methods接受所有HTTP方法

我创建了pap webapi并实现了身份验证.我有令牌方法来获取用户令牌.一切正常.

场景: 我用邮递员测试了令牌方法.在这里,我注意到我可以使用任何类型的HTTP方法来请求令牌.我认为/ token方法应该只支持POST方法.但是当我使用DELETE方法时,我也得到了令牌.同样,我也可以使用PUT,PATH等.

这是预期的吗?我假设除了POST请求之外它应该返回Method Not Supported.

c# asp.net-web-api asp.net-identity

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

具有基础实体接口的数据库优先

环境:

我正在使用数据库优先方法。我的数据库中有3个表。所有这些表都有状态字段以指示记录状态。这是一个整数字段。

场景:

我使用db first方法从该表创建了模型图。然后,我为CRUD操作创建了一个通用的存储库接口和类。

以下是界面;

public interface IGenericRepository<T> where T : class
{

    IQueryable<T> GetAll();
    Task<T> GetAsync(int id);
    void Add(T entity);
    void Delete(T entity);
    void Edit(T entity);
    Task<bool> SaveAsync();
}
Run Code Online (Sandbox Code Playgroud)

以下是通用存储库类

    public abstract class GenericRepository<C, T> :
        IGenericRepository<T> where T : class
                              where C : MyDBContext, new()
    {
    public virtual IQueryable<T> GetAll()
    {
        IQueryable<T> query = _entities.Set<T>();
        return query;
    }
//Removed other methods for clarity
}
Run Code Online (Sandbox Code Playgroud)

需求:

在GetAll方法中,我需要检查状态字段并仅返回value = 1

当前的解决方案我有:

由于这是通用存储库,因此无法访问方法中的字段。我们可以创建一个带有Status字段的基本Interface,然后在通用存储库中继承它,并可以在方法中使用此字段。

如下所示的更改;

    public interface IGenericRepository<T> where T : …
Run Code Online (Sandbox Code Playgroud)

c# generics entity-framework db-first

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

选择查询 VS 查看

通常我们会定期使用 SQL Job 将事务数据聚合到一张表中。现在客户需要实时数据,所以 1 小时或 1 小时太长了。团队建议创建一个视图,其中包含从事务表本身选择数据的逻辑,而不是在几分钟内运行作业。

但我的困惑是选择查询和视图之间任何与性能相关的差异。以周期性方式将数据放入聚合表中并从该聚合中进行选择很容易,因为 1. 它不会影响主表

直接事务表中的直接选择语句会影响频繁发生的插入操作。如果我创建一个视图,我认为这个概念与 select 语句相同。现在我们也从主表中进行选择。还是我的理解有误?

请提出最佳方法以及原因

sql sql-server aggregate

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

插入到已删除的输出子句中

我正在归档我的表数据以归档表。为此,我只是根据某些条件将记录插入到存档表中,并在下一条语句中删除主表中具有相同条件的记录。

但是为了提高性能,建议使用带有输出子句的单个语句。

代码 :

INSERT INTO AR_tbl1 
SELECT GETDATE(), D.*
FROM
    (DELETE FROM tbl1 
    WHERE Amt >= 40  
    OUTPUT DELETED.*) D
Run Code Online (Sandbox Code Playgroud)

但这是行不通的。如果我评论 where 子句,它会起作用。请帮我用where子句修复逻辑

sql t-sql sql-server-2008

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

在 LINQ 中对相似列进行分组并连接其他列

我有以下课程

public class InvoiceRO 
{
    public int ID{ get; set; }

    public string Address { get; set; }

    public string Reference1 { get; set; }

    public string DNNumber { get; set; }

    public string QuotationNumber { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

这里我有数据如下

ID   Address    Reference1  DNNumber   QuotationNumber
----------------------------------------------------------
1    add1           ref1      d001      q001
2    add1           ref1      d001      q002
3    add1           ref1      d002      q003
Run Code Online (Sandbox Code Playgroud)

我只需要一行作为输出,因此前 2 列值将相等并且仅得到一个,最后 2 列将连接并检索为逗号分隔值。最终输出将是

ID   Address    Reference1  DNNumber        QuotationNumber
----------------------------------------------------------
1    add1           ref1      d001, d002      q001, q002, …
Run Code Online (Sandbox Code Playgroud)

c# linq linq-group

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

DateTime.TryParse还是Datetime.TryParseExact?

我正在从字符串转换日期和时间.我从我的输入中添加日期部分,如下所示

string joinedString = txtMonth.Text.Trim() + "/" + txtDate.Text.Trim() + "/" + txtYear.Text.Trim();
Run Code Online (Sandbox Code Playgroud)

通常我转换字符串如下

DateTime dt;
if (DateTime.TryParse(joinedString, out dt))
{
    lblOutputCulture.Text = dt.ToString();
}
else
{
    lblOutputCulture.Text = "Invalid Date Time!!!";
}
Run Code Online (Sandbox Code Playgroud)

如果文化的文化和日期时间格式与我的字符串模式相同,我可以在这里获得日期时间.但如果它像'dd-MM-yy'那样被转换,那么转换就会失败.

为了克服这个问题,我们需要使用InvariantCulture进行解析.为此我发现了2种方法

方法1:使用DateTime.TryParse

if (DateTime.TryParse(joinedString, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
{
    lblOutput.Text = dt.ToString();
}
else
{
    lblOutput.Text = "Invalid Date Time!!!";
}
Run Code Online (Sandbox Code Playgroud)

即使更改了系统的日期时间格式,也会成功转换日期时间.以下优点i)日期和月份输入是1位数或2位数ii)年输入是2位数或4位数

方法2:使用DateTime.TryParseExact

if (DateTime.TryParseExact(joinedString, "M/d/yy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
{
    lblOutput.Text = dt.ToString();
}
else
{
    lblOutput.Text = "Invalid Date Time!!!";
}
Run Code Online (Sandbox Code Playgroud)

这里也将datetime转换为具有特定文化但严格按照我在tryparseexact语句中给出的格式.

但以下是这个问题i)如果我给4位数年份输入它显示无效的日期和时间.如果我将格式更改为'M/d/yyyy',我将无法提供2位数的年份数.就像我添加时间部分一样,我需要给时间部分强制性.

哪一个更好?请提出建议.但主要是我在所有博客和论坛中找到了第二种方法.. …

.net c# datetime

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

Deserialise xml中路径中的非法字符?

我有一个xml,我需要反序列化为List.实际上我只是使用XSD2Code工具来生成序列化和反序列化方法.

一切正常,但是当我传递文件名时,由于路径中的非法字符,我得到了xmlstring但没有反序列化

我的代码:

    public  T LoadFromFile(string fileName)
    {
        System.IO.FileStream file = null;
        System.IO.StreamReader sr = null;
        try
        {
            file = new System.IO.FileStream(fileName, FileMode.Open, FileAccess.Read);
            sr = new System.IO.StreamReader(file);
            string xmlString = sr.ReadToEnd();
            sr.Close();
            file.Close();

            return Deserialize(xmlString);
        }
        finally
        {
            if ((file != null))
            {
                file.Dispose();
            }
            if ((sr != null))
            {
                sr.Dispose();
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

在这里我得到了xmlString,我得到的字符串是......

"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ZTIMES_SQL_TO_SAP_CELL.Response xmlns=\"urn:sap-com:document:sap:rfc:functions\">\r\n  <IT_RETURN xmlns=\"\">\r\n    <item>\r\n      <INAME>CELLCOMPLETION</INAME>\r\n      <UNQ_ID>1234</UNQ_ID>\r\n      <STATUS>F</STATUS>\r\n    </item>\r\n    <item>\r\n      <INAME>CELLCOMPLETION</INAME>\r\n      <UNQ_ID>1235</UNQ_ID>\r\n      <STATUS>S</STATUS>\r\n    </item>\r\n    <item>\r\n      <INAME>CELLCOMPLETION</INAME>\r\n      <UNQ_ID>1236</UNQ_ID>\r\n      <STATUS>F</STATUS>\r\n    </item>\r\n  </IT_RETURN>\r\n …
Run Code Online (Sandbox Code Playgroud)

c# xml

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

Serilog SelfLog 到文件错误

我需要将 seri 记录器的自我日志启用到文本文件。我的配置如下;

__serilogLogger = new LoggerConfiguration()
      .Enrich.WithProperty("ApplicationIPv4", _ipv4)
      .Enrich.WithProperty("ApplicationIPv6", _ipv6)
      .WriteTo.MSSqlServer(connectionString, tableName /*, columnOptions: columnOptions*/)
      .WriteTo
      .Seq(ConfigurationManager.AppSettings["SerilogServer"])
      .CreateLogger();

      var file = File.CreateText("Self.log");
      Serilog.Debugging.SelfLog.Enable(TextWriter.Synchronized(file));
Run Code Online (Sandbox Code Playgroud)

但是在运行应用程序时文件访问错误是怎么回事。请在下面找到错误详细信息;

附加信息:该进程无法访问文件“C:\Program Files (x86)\IIS Express\Self.log”,因为它正被另一个进程使用。

谁可以帮我这个事

c# asp.net-web-api2 serilog

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