小编Sri*_*eti的帖子

自定义验证属性始终返回IsValid == true

我试图让一个简单的自定义验证属性工作,但无法看到我错过了什么.

[AttributeUsage(AttributeTargets.Property)]
public class CustomValAttribute :ValidationAttribute
{
    public override bool IsValid(object value)
    {
        return false;
    }
}

public class TestModel
{
   [CustomVal]
   public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试验证:

var test = new TestModel (){ Name = "test" };
 ValidationContext contx = new ValidationContext(test, null, null);
 var results = new List<ValidationResult>();
 Console.WriteLine(Validator.TryValidateObject(test, contx, results));
Run Code Online (Sandbox Code Playgroud)

但结果总是如此,然后我发现我的自定义验证器的IsValid方法永远不会被调用Validator.我究竟做错了什么?

.net c#

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

存储库模式和聚合根模式和实体框架

我正在根据存储库模式,聚合根和工作单元来构建我的应用程序.我使用Entity Framework5作为ORM.

我处于这样一种情况:我不知道如何继续添加新的实体,这些实体是聚合根并且与非聚合根的实体具有外键关系.

我不确定我之前的陈述是否合理,但让我在这里举一个例子.

Db中的人员表(这是我的应用程序中的聚合根)

  1. 名称
  2. 地址第一行
  3. CountryID

国家表(这不是聚合根,因为我可能永远不需要独立查询它们)

  1. CountryID
  2. 国家的名字

在我的应用程序中,我有PersonsRepository,它实现了一个通用的Repository,其中T是一个Aggregate root.

现在,当我在代码中创建一个新人时,我需要将Country添加到Person对象的Navigation属性中.如果我创建一个新的国家对象并将其分配给Person的Country属性并尝试保存Person对象,则EF抛出错误.我无法查询Countries表,因为它不是我的Aggregate root.

嗯,这不是我的实际情况,但这是我想要克服的.我该怎么办?

我想到的一个想法是创建一个通用的只读存储库,用于查询数据库而不是修改它,这是一个好的方法,或者我做的有什么不对.

在此先感谢您的回复和阅读长篇文章.

.net entity-framework aggregateroot repository-pattern

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

volatile关键字的用法

我正在阅读有关volatile关键字的信息,并想知道下面的场景如何锻炼.

Class SomeClass
 {
  volatile int i = 10;
 }
Run Code Online (Sandbox Code Playgroud)

两个线程正在尝试修改变量i.

Thread 1 does i = i + 1;
Thread 2 does i = i - 1;
Run Code Online (Sandbox Code Playgroud)

操作顺序如下:

线程1将变量i读入CPU寄存器.此时发生线程切换.线程2读取变量i并将其递减1,因此现在i的值为9; 线程1再次被调度,现在线程1将采用i值格式寄存器(为10)并将其递增为11并将其写回i或将其从原始源读取并将i值读取为9并增加它到10?

谢谢

c# volatile

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

无法从 GenericIdentity 检索角色

我正在设置一个GenericPrincipal添加GenericIdentity& 角色,但是当我尝试从中检索角色时,我什么也没得到。但是,如果我调用Principal.IsInRole,它会返回正确的值。

我错过了什么?

示例: https : //dotnetfiddle.net/Uan3ru

var identity = new GenericIdentity("Test", "Test");
var pricipal = new GenericPrincipal(identity, new[] { "Role1", "Role2" });
var cls = identity.Claims
                  .Where(c => c.Type == ClaimTypes.Role)
                  .Select(c => c.Value);
foreach(var c in cls)
{
    Console.WriteLine(c);
}
Console.WriteLine("complete");
Run Code Online (Sandbox Code Playgroud)

.net .net-security asp.net-identity

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