我只是学习接口隔离原理.但是在学习之后我对示例中的场景感到困惑.
这个概念是将接口分成简单的接口.那很好,但我的问题是层次结构模型与否?
以我在书中研究的例子为例.
我有一个产品接口具有以下属性
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) 我从第一个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之前总是需要添加标签的脚本吗?那为什么默认模板显示在错误的位置?
我正在用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连接器.
其他详情:
在Visual Studio 2015和17初始时间,它显示提供程序.当我下次尝试时它没有显示请帮忙.我正在检查这2天
我创建了pap webapi并实现了身份验证.我有令牌方法来获取用户令牌.一切正常.
场景: 我用邮递员测试了令牌方法.在这里,我注意到我可以使用任何类型的HTTP方法来请求令牌.我认为/ token方法应该只支持POST方法.但是当我使用DELETE方法时,我也得到了令牌.同样,我也可以使用PUT,PATH等.
这是预期的吗?我假设除了POST请求之外它应该返回Method Not Supported.
环境:
我正在使用数据库优先方法。我的数据库中有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) 通常我们会定期使用 SQL Job 将事务数据聚合到一张表中。现在客户需要实时数据,所以 1 小时或 1 小时太长了。团队建议创建一个视图,其中包含从事务表本身选择数据的逻辑,而不是在几分钟内运行作业。
但我的困惑是选择查询和视图之间任何与性能相关的差异。以周期性方式将数据放入聚合表中并从该聚合中进行选择很容易,因为 1. 它不会影响主表
直接事务表中的直接选择语句会影响频繁发生的插入操作。如果我创建一个视图,我认为这个概念与 select 语句相同。现在我们也从主表中进行选择。还是我的理解有误?
请提出最佳方法以及原因
我正在归档我的表数据以归档表。为此,我只是根据某些条件将记录插入到存档表中,并在下一条语句中删除主表中具有相同条件的记录。
但是为了提高性能,建议使用带有输出子句的单个语句。
代码 :
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子句修复逻辑
我有以下课程
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) 我正在从字符串转换日期和时间.我从我的输入中添加日期部分,如下所示
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位数的年份数.就像我添加时间部分一样,我需要给时间部分强制性.
哪一个更好?请提出建议.但主要是我在所有博客和论坛中找到了第二种方法.. …
我有一个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) 我需要将 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”,因为它正被另一个进程使用。
谁可以帮我这个事