好的,所以我们内部有一个实用工具,可以从我们的数据库表和视图中生成业务模型类,类似于(但不完全像)ORM.在维护它时,我发现模式中的数据可能不会发生很大的变化.但是,功能可能会.我们可能希望在未来添加其他功能.我们可能想要生成一些功能,我们可能想要扩展它.
我们正在构建的类将驻留在类库中,供其他库和应用程序使用.那里没什么大惊喜.但这里的难点是如何设计生成的类,以便在重新生成类时尽可能少地破坏代码.例如,如果代码已添加到属性(表示数据库表中的列),我们不希望丢失它.
因此,有两种方法可以想到:
经典继承,整个过程在一个"单片"类中完成,消费者可以自由地覆盖基础实现.然而,这有时会变得棘手,并经常引入铸造头痛.此外,如果派生类不小心并忘记调用基类功能,事情很快就会出错.
部分课程.在此方案中,我们将业务对象分成不同的部分:属性(映射到列)和行为.行为甚至可以进一步细分为生成的行为和自定义行为.正如您所看到的,这种方法的问题在于其固有的复杂性.此外,还有命名问题.
以下是我的问题:当你处理这样的场景时(如果有的话),或者如果你遇到这样的场景,你会考虑哪些解决方案,为什么?
考虑以下存储过程:
CREATE OR ALTER PROCEDURE MySchema.MyProcedure
@myDateTimeParam DATETIME = GETDATE()
AS
BEGIN
-- Do something spectacular
END
Run Code Online (Sandbox Code Playgroud)
调用时,参数声明失败并显示错误“将数据类型 nvarchar 转换为日期时出错”。这可以通过如下更改代码来解决:
CREATE OR ALTER PROCEDURE MySchema.MyProcedure
@myDateTimeParam DATETIME = NULL
AS
BEGIN
IF @myDateTimeParam IS NULL
SET @myDateTimeParam = GETDATE();
-- Do something spectacular
END
Run Code Online (Sandbox Code Playgroud)
但是,假设@myDateTimeParam没有默认值:
CREATE OR ALTER PROCEDURE MySchema.MyProcedure
@myDateTimeParam DATETIME
AS
BEGIN
-- Do something spectacular
END
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您不能简单地GETDATE()作为形式参数传递,如下所示:
EXEC MySchema.MyProcedure GETDATE()
Run Code Online (Sandbox Code Playgroud)
因为这也会产生可怕的“将数据类型 nvarchar 转换为日期时出错”的错误。唯一的解决方法是首先声明一个变量,然后传递该变量:
DECLARE @myDateTimeParam DATETIME = GETDATE();
EXEC MySchema.MyProcedure @myDateTimeParam;
Run Code Online (Sandbox Code Playgroud)
为什么是这样?源数据类型和目标数据类型都是DATETIME …
我希望能够从Oracle 9i数据库中检索子程序,函数,包规范和包体的模式信息,以便我可以使用系统中的类将它们呈现给C#客户端中的用户. Data.OracleClient命名空间.
到目前为止,我已经能够以比Java应用程序更快的速度显示高级模式数据,但是包和函数是我无法掌握的.我可以以非常有用的方式显示列,它们的类型,索引,表级和列级注释以及各种非常有用的信息.现在,如果我能够完成程序.
我正在尝试使用以下代码将yyyymmdd格式的日期转换为yyyy-mm-dd:
tdrDate = DateTime.ParseExact(dateString, "yyyymmdd", null).ToString("yyyy-MM-dd");
Run Code Online (Sandbox Code Playgroud)
这项工作唯一的问题是,当我有一个像" 20070205 " 这样的日期时,我会回来" 2007-01-05 ".我不知道为什么会这样,任何帮助都表示赞赏.
假设我有这样一个类:
public class Foo
{
public Bar RequiredProperty { get; set;}
public void Baz()
{
if (this.RequiredProperty == null)
{
// Which exception should I throw?
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的解决方案有一个专门设计用于重用的类,而不必Bar一次又一次地将大量参数传递给该方法.那么,当Bar未初始化为非空值时,我应该抛出什么?
更多信息
我实际上是在编写自己的代码解析器和格式化程序.称之为对象课程.其中一个类HtmlCodeFormatter具有以下属性(以表示依赖注入):
public IFormatter Formatter { get; set; }
public IParser Parsre { get; set; }
Run Code Online (Sandbox Code Playgroud)
这允许我编写任意数量的特定于语言的解析器和格式化程序.例如,我有一个CSharpParser和一个JavascriptParser.我也有HtmlCodeFormatter,并且计划另一个(可疑的实用程序).
这个想法是你可以实例化HtmlFormatter使用对象初始化器,如下所示:
var formatter = new HtmlCodeFormatter()
{
Parser = new CSharpParser();
Formatter = new HtmlCodeFormatter();
};
formatter.Format("Console.WriteLine(\"Hello, world!\"));
Run Code Online (Sandbox Code Playgroud)
当 …
我试图为Lotus Notes 8.5 Plug-in Development配置Eclipse,并且正在疯狂地寻找有关如何正确执行它的建议.
我搜索过网络,发现了几篇关于如何做的文章,但似乎没有一篇文章在我的机器上运行.(我没有尝试在另一台机器上这样做.)
机器的配置如下:
据我所知,以下是先决条件:
以下是我采取的安装和配置步骤.
当我尝试创建客户端服务项目(插件)时出现问题.当我创建插件项目,并且Eclipse开始生成代码时,在事件日志中找到以下内容:
例外列表继续.如果他们被要求我会尽我所能.
显然,我做错了什么.它不能被这个困难(或反直觉)来获取这些技术来一起玩.
有人可以向我提供有关正确要求的信息(先决条件,等等)以及如何设置它们?这是一项关键任务,最初完成这项工作的开发人员没有为他的环境配置留下任何规范.我完全处于黑暗中.
HALP !!!!
编辑
正如所指出的,我使用的是Expeditor 6.2.1,而不是6.2.2.我通过查看Expeditor文件夹中的许可证并查看site.xml文件的内容来验证这一点:
<site>
<feature id="com.ibm.pvc.tools.composite-feature" patch="false" …Run Code Online (Sandbox Code Playgroud) 我们未能成功使用Windows服务部署OWIN Web API服务(如此StackOverflow问题中所述).经过多次尝试解决问题后,我们决定简单地创建一个ASP.NET Web API站点并通过IIS进行部署.
在本地运行时,可以访问所有操作.但是,如果我们发布网站(使用Build - > Publish或其任何变体),我们会观察到以下内容:
URL ACL已创建如下:
netsh http add urlacl http://+:8098/api user=Everyone
Run Code Online (Sandbox Code Playgroud)
防火墙似乎没有阻塞端口(我们可以通过上面的步骤1来实现).URL ACL存在,公司中的每个人都可以访问它(他们应该这样做).我们不知道为什么会发生这种情况,似乎无法找到合适的答案.
有人可以建议我们可能忽略的原因或可能的解决方案吗?
UPDATE
从控制器中删除逻辑并重新发布后,Windows应用程序事件日志中出现以下(缩写)警告信息:
Event code: 3005
Event message: An unhandled exception has occurred.
Exception information:
Exception type: HttpException
Exception message: Could not find a part of the path 'D:\websites\LoggingWebApi\bin\roslyn\csc.exe'.
Run Code Online (Sandbox Code Playgroud)
这是有趣的.看起来Publish没有使用构建版本分发Roslyn编译器.
更新2 控制器上最简单的操作方法是:
[HttpGet]
[Route("Status")]
public string Status()
{
return "Online";
}
Run Code Online (Sandbox Code Playgroud)
即使手动将Roslyn程序集复制到bin文件夹中的服务器之后,该方法也会返回HTTP 503.应用程序事件日志中不会显示任何错误消息.
当这个方法在本地运行时(在我的机器上),它返回一个JSON字符串,我可以在文本编辑器中打开它.
对此的答案可能非常明显,但无论如何我都会不屑一顾。
我正在编写一个Range<T>类,在这个过程中我意识到我需要一个比较器。所以,我写了一个通用的比较器,自然地,来自Comparer<T>:
public class Range<T> where T : IComparable
{
// Simplified here for brevity -- actually uses the comparer
public T Min { get; set; }
// Simplified here for brevity -- actually uses the comparer
public T Max { get; set; }
private class DefaultComparer : Comparer<T>
{
public override int Compare(T x, T y)
{
return x == null && y == null
? 0
: x == null
? -1
: y …Run Code Online (Sandbox Code Playgroud) 我有以下代码适用于 .NET 4.8 类库,它使用Assembly.ReflectionOnlyLoad
代码:
// Retrieve the doman assembly used by the compilation
Assembly baseAssembly = typeof(MyType).Assembly;
// Retrieve the location of the assembly and the referenced assemblies used by the domain
AssemblyName[] baseAssemblyReferences = baseAssembly.GetReferencedAssemblies();
List<string> baseAssemblyLocations = baseAssemblyReferences.Select(a => Assembly.ReflectionOnlyLoad(a.FullName).Location).ToList();
baseAssemblyLocations.Add(baseAssembly.Location);
// Create Compilation Parameters
CompilerParameters compileParams = new CompilerParameters()
{
CompilerOptions = Constants.Assembly.CompileToLibrary,
GenerateInMemory = true
};
compileParams.ReferencedAssemblies.AddRange(baseAssemblyLocations.ToArray());
// Create Code Provider
CSharpCodeProvider provider = new CSharpCodeProvider(new Dictionary<string, string>() {
{ Constants.Assembly.CompilerVersion, Constants.Assembly.CompilerVersion4 }
}); …Run Code Online (Sandbox Code Playgroud) 是否有可下载的文档可以封装StyleCop强制执行的核心规则?
我们已经确定了C#,我们将使用FxCop和StyleCop来强制执行设计和样式指南.为了帮助人们加快速度,我们希望确保他们手头有参考材料的印刷版本作为随意阅读材料,所以我希望有各种规则参考的PDF版本.
到目前为止,我对StyleCop规则参考的搜索没有结果.如果有人知道这些规则是否可用作合并文档(PDF,XPS或其他一些可下载的参考文献),我将非常感激.