有谁知道bcrypt的一个很好的实现,我知道这个问题之前已被问过,但它得到的答案很少.我有点不确定只是选择在谷歌中出现的实现,并且我认为我最好在System.Security.Cryptography命名空间中使用sha256,至少我知道它是支持的!你有什么想法?
因此,在一个典型的模型中,您的父母可以拥有许多孩子,而孩子只能拥有一个父母,那么如何管理孩子的添加.我一直在使用这种方法;
public class Parent
{
public Parent()
{
Children = new List<Child>();
}
public IList<Child> Children
{
get;
private set;
}
}
public class Child
{
public Parent Parent
{
get;
set;
}
}
var child = new Child();
var parent = new Parent();
parent.Children.Add(child);
child.Parent = parent;
Run Code Online (Sandbox Code Playgroud)
问题是,无论我想添加一个新的孩子,我都必须记住添加对孩子和父母的引用,这有点痛苦.我可以将AddChild方法添加到父类,并使其负责添加子项 - 现在的问题是有两种方法可以通过Children属性和方法添加子项.这是一个更好的解决方案吗?
public class Parent
{
public Parent()
{
children = new List<Child>();
}
private IList<Child> children
{
get;
private set;
}
public IEnumerable<Child> Children
{
get
{
return children;
} …Run Code Online (Sandbox Code Playgroud) 我目前正在为我的课程使用hilo id生成器,但刚刚使用了最少的设置,例如
<class name="ClassA">
<id name="Id" column="id" unsaved-value="0">
<generator class="hilo" />
</id>
...
但是我真的要为NHibernate指定一个新列来使用foreach实体并为它提供最大值吗?
<class name="ClassA">
<id name="Id" column="id" unsaved-value="0">
<generator class="hilo">
<param name="table">hibernate_unique_key</param>
<param name="column">classA_nexthi</param>
<param name="max_lo">20</param>
</generator>
</id>
...
<class name="ClassB">
<id name="Id" column="id" unsaved-value="0">
<generator class="hilo">
<param name="table">hibernate_unique_key</param>
<param name="column">classB_nexthi</param>
<param name="max_lo">20</param>
</generator>
</id>
...
Run Code Online (Sandbox Code Playgroud)
另外我注意到,当我执行上述操作时,SchemaExport将不会创建所有列 - 只有classB_nexthi,还有其他我做错了.
我刚刚开始使用NServiceBus,并且无法弄清楚在代码中配置MsmqTransport时我缺少的东西.如果我像这样配置发布者;
IBus bus = Configure.With()
.CastleWindsorBuilder()
.XmlSerializer()
.MsmqSubscriptionStorage()
.MsmqTransport()
.IsTransactional(true)
.PurgeOnStartup(false)
.UnicastBus()
.ImpersonateSender(false)
.CreateBus()
.Start();
bus.Publish(new Message(DateTime.Now));
Run Code Online (Sandbox Code Playgroud)
和app.config一样
<configSections>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
</configSections>
<MsmqTransportConfig
InputQueue="testapps_messagebus"
ErrorQueue="testapps_errors"
NumberOfWorkerThreads="1"
MaxRetries="5" />
然后一切正常 - 它将创建队列,我可以愉快地消息,但是如果我删除队列,然后再尝试使用这样的代码;
var config = Configure.With()
.CastleWindsorBuilder()
.XmlSerializer()
.UnicastBus()
.ImpersonateSender(false)
.MsmqSubscriptionStorage();
config
.Configurer
.ConfigureComponent<MsmqTransport>(NServiceBus.ObjectBuilder.ComponentCallModelEnum.None)
.ConfigureProperty(x => x.InputQueue, "testapps_messagebus")
.ConfigureProperty(x => x.NumberOfWorkerThreads, 1)
.ConfigureProperty(x => x.ErrorQueue, "testapps_errors")
.ConfigureProperty(x => x.MaxRetries, 5);
IBus bus = config
.CreateBus()
.Start();
bus.Publish(new Message(DateTime.Now));
Run Code Online (Sandbox Code Playgroud)
消息似乎丢失了,因为它们没有出现在任何队列中也没有得到处理 - 我猜我错过了什么,但我看不到哪里.
我有一个创建对象的帐户对象,就像这样;
public class Account
{
public ICollection<User> Users { get; set; }
public User CreateUser(string email)
{
User user = new User(email);
user.Account = this;
Users.Add(user);
}
}
Run Code Online (Sandbox Code Playgroud)
在我的服务层中,创建新用户时,我调用此方法。但是,有一个规则,即用户电子邮件对于该帐户必须是唯一的,那么该去哪里呢?对我来说,它应该放在CreateUser方法中,并带有额外的一行,该行仅检查电子邮件对于帐户而言是唯一的。
但是,如果要这样做,则将需要加载该帐户的所有用户,这对我来说似乎有些负担。最好在数据库中查询用户的电子邮件-但在该方法中这样做将需要在account对象中存储一个库,不是吗?答案可能就是从存储库加载帐户而不是这样做。
var accountRepository.Get(12);
//instead do
var accountRepository.GetWithUserLoadedOnEmail(12, "someone@example.com");
Run Code Online (Sandbox Code Playgroud)
然后,该帐户对象仍可以检查Users集合中的电子邮件,并且如果找到该电子邮件对象,则将它急切地装入其中。
这样行吗?你会怎么做?
我正在使用NHibernate作为ORM。
Castle Windsor Container是否可以让一个组件实现两个不同的接口,然后在解析它时返回相同的组件实例?例如;
var windsor = new WindsorContainer()
.AddComponent<InterfaceA, ClassAB>()
.AddComponent<InterfaceB, ClassAB>();
var classAB1 = windsor.Resolve<InterfaceA>();
var classAB2 = windsor.Resolve<InterfaceB>();
Assert.AreSame(classAB1, classAB2);
Run Code Online (Sandbox Code Playgroud)
如果我按照所示尝试这个,我得到一个异常,消息已经为给定的密钥注册了一个组件,如果我提供了不同的密钥,那么它将返回该类的两个独立实例ClassAB.
编辑:理想情况下,我想在配置文件中执行此操作.
有人可以向我解释NHibernate如何处理复合元素的这个小谜.
我的课程看起来像这样;
public class Blog
{
public virtual int Id
{
get;
private set;
}
public virtual ISet<Comment> Comments
{
get;
set;
}
}
public class Comment
{
public virtual string CommentText
{
get;
set;
}
public virtual DateTime Date
{
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
和这样的映射;
<class name="Blog" table="blog">
<id name="Id" column="id" unsaved-value="0">
<generator class="hilo"/>
</id>
<set name="Comments" table="blog_comments">
<key column="blog_id" />
<composite-element class="Comment">
<property name="CommentText" column="comment" not-null="true" />
<property name="Date" column="date" not-null="true" />
</composite-element>
</set>
</class>
Run Code Online (Sandbox Code Playgroud)
但是当我执行这样的选择时;
using (ITransaction …Run Code Online (Sandbox Code Playgroud) 我一直在寻找使用J Oliver的EventStore和mongo作为持久层的新项目的事件采购,但是遇到了一些问题:
在尝试事件采购之前,我的域名持久存储到数据库中,我一直在使用Udi的域事件模式,这对我来说非常有效,NHibernate管理工作单元.但是我最终得到了一个可以影响多个聚合的工作单元,例如.
我"结帐"我的购物篮聚合,它会引发一个事件,处理程序通过创建发票聚合来响应,这反过来又会引发一个事件(这只是一个例子)
在这种情况下,我有一个工作单元改变了两个聚合根 - 在事件存储中我可以将引发的事件添加到两个不同的事件流中,但它们不会以原子方式持久化(第一个可能成功,第二个失败) .那么人们做些什么来避免发生这种情况呢?
在github主页上,它建议您可以使用流畅的界面来配置EventStore,但是当我下载源代码时,编译它并查看示例中的连接类似乎不可用 - 它是否在不同的分支中?(我有主人)
处理IStoreEvents impl的推荐方法是什么?作为一个类似于Nhibernates会议工厂的单身人士?