小编Mik*_*fer的帖子

.NET部分类与继承

好的,所以我们内部有一个实用工具,可以从我们的数据库表和视图中生成业务模型类,类似于(但不完全像)ORM.在维护它时,我发现模式中的数据可能不会发生很大的变化.但是,功能可能会.我们可能希望在未来添加其他功能.我们可能想要生成一些功能,我们可能想要扩展它.

我们正在构建的类将驻留在类库中,供其他库和应用程序使用.那里没什么大惊喜.但这里的难点是如何设计生成的类,以便在重新生成类时尽可能少地破坏代码.例如,如果代码已添加到属性(表示数据库表中的列),我们不希望丢失它.

因此,有两种方法可以想到:

经典继承,整个过程在一个"单片"类中完成,消费者可以自由地覆盖基础实现.然而,这有时会变得棘手,并经常引入铸造头痛.此外,如果派生类不小心并忘记调用基类功能,事情很快就会出错.

部分课程.在此方案中,我们将业务对象分成不同的部分:属性(映射到列)和行为.行为甚至可以进一步细分为生成的行为和自定义行为.正如您所看到的,这种方法的问题在于其固有的复杂性.此外,还有命名问题.

以下是我的问题:当你处理这样的场景时(如果有的话),或者如果你遇到这样的场景,你会考虑哪些解决方案,为什么?

.net partial-classes

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

为什么不能将 GETDATE() 用作过程参数的默认值或 EXECUTE 语句中的值?

考虑以下存储过程:

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 …

t-sql sql-server

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

如何检索Oracle过程或函数的主体

我希望能够从Oracle 9i数据库中检索子程序,函数,包规范和包体的模式信息,以便我可以使用系统中的类将它们呈现给C#客户端中的用户. Data.OracleClient命名空间.

到目前为止,我已经能够以比Java应用程序更快的速度显示高级模式数据,但是包和函数是我无法掌握的.我可以以非常有用的方式显示列,它们的类型,索引,表级和列级注释以及各种非常有用的信息.现在,如果我能够完成程序.

.net c# oracle plsql stored-procedures

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

日期格式化yyyymmdd到yyyy-mm-dd

我正在尝试使用以下代码将yyyymmdd格式的日期转换为yyyy-mm-dd:

tdrDate = DateTime.ParseExact(dateString, "yyyymmdd", null).ToString("yyyy-MM-dd");
Run Code Online (Sandbox Code Playgroud)

这项工作唯一的问题是,当我有一个像" 20070205 " 这样的日期时,我会回来" 2007-01-05 ".我不知道为什么会这样,任何帮助都表示赞赏.

.net c# datetime

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

.NET:未设置必需属性时抛出哪个异常?

假设我有这样一个类:

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)

当 …

.net dependency-injection exception

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

正确配置Eclipse for Lotus Notes 8.5插件开发

我试图为Lotus Notes 8.5 Plug-in Development配置Eclipse,并且正在疯狂地寻找有关如何正确执行它的建议.

我搜索过网络,发现了几篇关于如何做的文章,但似乎没有一篇文章在我的机器上运行.(我没有尝试在另一台机器上这样做.)

机器的配置如下:

  • Windows 7旗舰版64位
  • 英特尔酷睿i5 CPU
  • 6 GB RAM

据我所知,以下是先决条件:

  • JDK 6 SE(SR 2)(32位)
  • Lotus Notes 8.5.1 Designer(32位)
  • Lotus Expeditor Toolkit 6.2.2(32位)< - 错!!! 6.2.1!
  • Eclipse Ganymede(32位)

以下是我采取的安装和配置步骤.

  1. 将JDK和JRE安装到c:\ java
  2. 修改计算机的PATH环境变量以包含C:\ java\jdk6\jre\bin.
  3. 将Eclipse Ganymede解压缩到c:\ eclipse.
  4. 将备注安装到c:\ lotus \notes
  5. 将Expeditor安装到c:\ lotus\expeditor
  6. 按照此处的说明配置Expeditor .
  7. 按照此处所述为Notes 8.5开发配置Eclipse .

当我尝试创建客户端服务项目(插件)时出现问题.当我创建插件项目,并且Eclipse开始生成代码时,在事件日志中找到以下内容:

  • "无法满足com.ibm.pvc.tools.composite-feature.feature.group 6.1.2.200801281900对requiredCapability的依赖性:org.eclipse.equinox.p2.iu/org.eclipse.equinox.common/[3.2.0, 3.3.0)."
  • org.eclipse.core.resources中抛出InvalidRegistryObjectException.(多次发生.)
  • 在org.eclipse.core资源中抛出了ConcurrentModificationException.
  • 而我最喜欢的:无法嵌套'C:Lotus/Notes/framework/rcp/eclipse/plugins/com.ibm.esupport.client.product.SSC4TNF_4.0.0.20090925-1604/core'在库中C:Lotus/Notes/framework/rcp/eclipse/plugins/com.ibm.esupport.client.product.SSC4TNF_4.0.0.20090925-1604'(多个包都会出现这种情况.)

例外列表继续.如果他们被要求我会尽我所能.

显然,我做错了什么.它不能被这个困难(或反直觉)来获取这些技术来一起玩.

有人可以向我提供有关正确要求的信息(先决条件,等等)以及如何设置它们?这是一项关键任务,最初完成这项工作的开发人员没有为他的环境配置留下任何规范.我完全处于黑暗中.

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)

eclipse plugins lotus-notes

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

可以访问ASP.NET Web API站点虚拟目录,但控制器操作返回HTTP 503

我们未能成功使用Windows服务部署OWIN Web API服务(如此StackOverflow问题中所述).经过多次尝试解决问题后,我们决定简单地创建一个ASP.NET Web API站点并通过IIS进行部署.

在本地运行时,可以访问所有操作.但是,如果我们发布网站(使用Build - > Publish或其任何变体),我们会观察到以下内容:

  1. 当我们浏览到机器名称和端口时,会看到虚拟目录的目录列表.
  2. 当我们请求控制器操作时,站点返回HTTP错误503.该服务不可用.
  3. 没有错误记录到目标服务器上的Windows应用程序事件日志中.
  4. 在托管服务器或客户端计算机上执行请求时也会发生相同的情况.

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字符串,我可以在文本编辑器中打开它.

asp.net roslyn asp.net-web-api

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

为什么 Nullable&lt;T&gt; 不实现 IComparable?

对此的答案可能非常明显,但无论如何我都会不屑一顾。

我正在编写一个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 generics

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

从 Assembly.ReflectionOnlyLoad 迁移到 MetadataLoadContext

我有以下代码适用于 .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)

c# system.reflection .net-6.0 metadataloadcontext

5
推荐指数
0
解决办法
333
查看次数

是否有可下载的文档可以封装StyleCop强制执行的核心规则?

是否有可下载的文档可以封装StyleCop强制执行的核心规则?

我们已经确定了C#,我们将使用FxCop和StyleCop来强制执行设计和样式指南.为了帮助人们加快速度,我们希望确保他们手头有参考材料的印刷版本作为随意阅读材料,所以我希望有各种规则参考的PDF版本.

到目前为止,我对StyleCop规则参考的搜索没有结果.如果有人知道这些规则是否可用作合并文档(PDF,XPS或其他一些可下载的参考文献),我将非常感激.

c# coding-style stylecop

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