我试图让一个简单的自定义验证属性工作,但无法看到我错过了什么.
[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
.我究竟做错了什么?
我正在根据存储库模式,聚合根和工作单元来构建我的应用程序.我使用Entity Framework5作为ORM.
我处于这样一种情况:我不知道如何继续添加新的实体,这些实体是聚合根并且与非聚合根的实体具有外键关系.
我不确定我之前的陈述是否合理,但让我在这里举一个例子.
Db中的人员表(这是我的应用程序中的聚合根)
国家表(这不是聚合根,因为我可能永远不需要独立查询它们)
在我的应用程序中,我有PersonsRepository,它实现了一个通用的Repository,其中T是一个Aggregate root.
现在,当我在代码中创建一个新人时,我需要将Country添加到Person对象的Navigation属性中.如果我创建一个新的国家对象并将其分配给Person的Country属性并尝试保存Person对象,则EF抛出错误.我无法查询Countries表,因为它不是我的Aggregate root.
嗯,这不是我的实际情况,但这是我想要克服的.我该怎么办?
我想到的一个想法是创建一个通用的只读存储库,用于查询数据库而不是修改它,这是一个好的方法,或者我做的有什么不对.
在此先感谢您的回复和阅读长篇文章.
我正在阅读有关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?
谢谢
我正在设置一个GenericPrincipal
添加GenericIdentity
& 角色,但是当我尝试从中检索角色时,我什么也没得到。但是,如果我调用Principal.IsInRole
,它会返回正确的值。
我错过了什么?
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)