小编Vin*_*ves的帖子

我应该从Domain层抽象验证框架吗?

我正在使用FluentValidation来验证我的服务操作.我的代码看起来像:

using FluentValidation;

IUserService
{
    void Add(User user);
}

UserService : IUserService
{
    public void Add(User user)
    {
       new UserValidator().ValidateAndThrow(user);
       userRepository.Save(user);
    }
} 
Run Code Online (Sandbox Code Playgroud)

UserValidator实现FluentValidation.AbstractValidator.

DDD表示域层必须与技术无关.

我正在做的是使用验证框架而不是自定义异常.

将验证框架放在域层中是一个坏主意吗?

c# architecture domain-driven-design repository fluentvalidation

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

乐观并发:IsConcurrencyToken和RowVersion

我正在创建我将在我的应用程序中使用的默认并发策略.

我决定采取乐观的策略.

我的所有实体都映射为Table per Type (TPT)(使用继承).我很快就了解到在实体框架上使用RowVersion类型的列并继承时存在问题:

Product

Id INT IDENTITY PRIMARY KEY
RowVersion ROWVERSION

Car (inherits Product records)

Color TYNIINT NOT NULL,
AnotherProperty....   
Run Code Online (Sandbox Code Playgroud)

如果我更新Car表的记录,表中的RowVersion列Product将不会更新.

我打算使用类型的列datetime2 (7)Product,并手动更新,如果沿用此表的表中的任何记录被修改.

我想我正在重新发明轮子.

在Entity Framework中ROWVERSION使用时Table per Type (TPT),还有另一种方法可以使用乐观并发策略吗?

编辑

我的映射:

class Product
{
    int Id { get; set; }
    string Name { get; set; }
    byte[] RowVersion { get; set; }
}

class Car : Product
{
    int Color { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# sql-server concurrency entity-framework ef-code-first

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

禁止/禁用/解决Visual Studio构建警告

我正在使用clickonce的Windows窗体应用程序.我必须部署一些资源程序集.这些程序集位于我的项目中的文件夹中(不作为参考).它们标记为BuildAction = content,CopyToOutputDir = Copy If Newer.使用此配置,我收到警告MSB3178:程序集''被错误地指定为文件.

当我将BuildAction设置为none时,警告会消失,但必须部署的程序集不会出现在ClickOnce Application Files中.

我想在clickonce的发布中添加这些程序集(有很多),没有这个警告,也没有在项目中添加这些dll作为引用.我研究了很多,但找不到禁用警告的解决方案.

编辑:

仅当我在"项目/属性/安全性选项卡"中设置"启用Clickonce安全设置"="True"时才会出现警告

样本项目:

单击以下载示例项目

只需构建并检查警告.

c# deployment clickonce winforms

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

没有服务定位器的域事件

提供域事件的默认实现:

表示域事件的接口:

public interface IDomainEvent { }
Run Code Online (Sandbox Code Playgroud)

表示通用域事件处理程序的接口:

public interface IEventHandler<T> where T : IDomainEvent
Run Code Online (Sandbox Code Playgroud)

筹集新活动的中央接入点:

public static class DomainEvents
{
    public static void Raise<T>(T event) where T : IDomainEvent
    {
        //Factory is a IoC container like Ninject. (Service Location/Bad thing)
        var eventHandlers = Factory.GetAll<IEventHandler<T>>();

        foreach (var handler in eventHandlers )
        {
            handler.Handle(event);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

消费:

public class SaleCanceled : IDomainEvent
{
    private readonly Sale sale;

    public SaleCanceled(Sale sale)
    {
        this.sale = sale;
    }

    public Sale Sale
    {
        get{ …
Run Code Online (Sandbox Code Playgroud)

c# domain-driven-design ninject inversion-of-control

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

不继承 IdentityUser 的 ASP.NET 身份

鉴于以下项目结构

 App.Domain - .NET Standard Library

     User.cs


 App.Web - .NET Core Web Application MVC
Run Code Online (Sandbox Code Playgroud)

App.Web 项目引用App.Domain 项目。是否可以使用具有用户 App.Domain.User 的 ASP.NET Identity,而不继承 IdentityUser?

为什么?

遵循 DDD 准则,我应该保持域层与技术无关,这就是为什么我不想在域层中添加对 ASP.NET Identity 的引用并从 IdentityUser 继承我的 User 类。

c# asp.net asp.net-identity asp.net-core

6
推荐指数
0
解决办法
1609
查看次数

Visual Studio - 字符串插值快捷方式(无需安装 VS 扩展)

我开始写一条消息,但不知道是否需要插入它。所以,我在消息的中间,想要插入一个$来插入我的字符串。

如果存在一些快捷方式,将会很有帮助。

像这样:

Log("Something happen here, at... (Oh God, I will need interpolate it..) {DateTime.Now}...");
Run Code Online (Sandbox Code Playgroud)

有吗?

c# string string-interpolation visual-studio

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

Windows 10操作系统上的Windows窗体图形问题

当我在Windows 10中运行任何Windows窗体应用程序时,窗口内的图形看起来是扭曲的:

坏图像

在设计时,这不会发生:

好的形象

有没有人经历过这个?

(请打开图片看看会更好.)

.net c# graphics scale winforms

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

C#记录SMB文件访问

我正在尝试通过SMB传输文件的简单日志.

这适用于Windows 8或更高版本:

var scope = new ManagementScope(@"\\.\root\Microsoft\Windows\SMB");

var query = new WqlEventQuery(

@"SELECT * 
  FROM 
      __InstanceOperationEvent WITHIN 1 
  WHERE 
      TargetInstance ISA 'MSFT_SmbOpenFile'"

);

ManagementEventWatcher watcher = new ManagementEventWatcher(scope, query);
watcher.EventArrived += new EventArrivedEventHandler(HandleEvent);

watcher.Start();

....
Run Code Online (Sandbox Code Playgroud)

但它不适用于Windows 7或更低版​​本.(运行时要求)

是否有类似的解决方案至少与Windows 7兼容?

1º编辑

看起来可能因为此Windows 7模块执行此任务:

计算机管理(我在Windows 7上看到这些信息)

MMC.EXE

2º编辑

澄清目的.我正在构建一个DLP应用程序(数据丢失防护).我需要监视和记录通过Windows共享(用户,文件名)访问的文件,并最终在用户请求文件时阻止此访问.

c# wmi winapi instrumentation wql

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

SSDT:“标识符必须至少包含一个名称(例如,MyTable)”

这两天试图找到这个错误的根源,但无法...

我的问题是一样的:链接

当我构建数据库项目时,出现以下错误:

“标识符必须至少包含一个名称(例如,MyTable)”

构建输出:

C:\Program Files (x86)\MSBuild\12.0\bin\Csc.exe /noconfig /nowarn:1701,1702,2008 /nostdlib+ /errorreport:prompt /warn:4 /define:DEBUG;TRACE /errorendlocation /preferreduilang:en -US /highentropyva+ /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.5\mscorlib.dll" /debug+ /debug:full /optimize- /out:obj\Debug\ Objetivo.Rango.BancoDados.dll /subsystemversion:6.00 /target:library /warnaserror- /utf8output "C:\Users\Vinicius\AppData\Local\Temp.NETFramework,Version=v4.5.SqlClrAttributes.cs" 正在加载项目引用。 .. 加载项目文件... 构建项目模型并解决对象相互依赖性... 验证项目模型... 将模型写入 D:\WorkspaceObjetivoSistemas\ObjetivoSistemas\Rango\RamoPrincipal\Rango\Objetivo.Rango.BancoDados\obj\ Debug\Model.xml...正在将创建脚本写入 Rango_Create.sql... C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\SSDT\Microsoft.Data.Tools.Schema.SqlTask​​s.targets (546,5):错误::标识符必须至少包含一个名称(例如,MyTable)。完成构建项目“Objetivo.Rango.BancoDados.sqlproj”——失败。

sql-server database-tools visual-studio-2012 sql-server-data-tools

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

503(服务不可用)状态码的正确使用方法

我有一个简单的 API 端点“api/machines/sum”,它与另一个 API 服务集成来处理值。

有时我正在集成的 API 可能离线/不可用。因此,我尝试返回 503 - 我的 API 无法提供服务,因为我的服务无法使用依赖的 API 离线处理任何内容

我的 API 服务运行正常,但依赖项不行。

从语义上讲,“服务不可用”的描述对我来说是有意义的。503状态码的使用方法是否正确?

样本:

public async Task<IActionResult> Sum(string value)
{
    try
    {
        ProcessValueFromAnotherAPI(id);
    }
    catch (AppIntegrationException)
    {
        return StatusCode(StatusCodes.Status503ServiceUnavailable, "custom message");
    }
}
Run Code Online (Sandbox Code Playgroud)

c# rest http

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