2
使用Entity Framework 4.2(代码优先)创建我的数据库,目前工作正常,但现在我面临的问题很容易在Hibernate或JPA中克服,但我不是能够在这里看到它。如何使用EntityFramework构建丰富域模型
我已经定义了一个User对象,它具有一个名为Password的属性,我想定制{get; set;}操作以在设置密码时拥有某些逻辑(我想存储它的哈希版本,但我想在我的域对象阿拉德DDD逻辑)。但即时通信面临的情况是,从数据库实现对象时,我们的setter被调用并且不直接使用私有字段。
我试图建立一个富域对象模型,并避免DAO/Repository模式。
这是可能通过实体框架,或者我会强制使用DAO /存储库模式。
下面是我的用户对象的提取:
public class User
{
[Key]
public string LoginId { get; set; }
[Required]
private string password;
public string Password
{
get { return password; }
set {
//Random Salt
byte[] s;
using (RNGCryptoServiceProvider prov = new RNGCryptoServiceProvider())
{
s = new byte[20];
prov.GetBytes(s);
}
this.salt = Convert.ToBase64String(s);
//Random salt
password = ComputeHash(value);
}
}
[Required]
private string salt;
public string Salt {
get { return this.salt; }
set { throw new InvalidOperationException("Salt is not an assignable property. Assign a password first to your model and a Salt will get created."); }
}
public bool ValidatePassword(string clearTextPassword)
{
return this.Password == this.ComputeHash(clearTextPassword);
}
public string ComputeHash(string value)
{
...
return hashVersion of value;
}
}
我忍不住想说这个答案:“为了构建一个丰富的DM,你首先需要一个丰富的领域。 Aquire this,你将在所有的事情上都取得成功' – Jeremy
感谢你的想法,我只是举了一个很短的例子,或者我只是用了错误的措辞(丰富的DM),但把它放在一边,回到原来的位置题。在EntityFramework中是否可以自定义{get; set;}并让EntityFramework直接将其逻辑映射到私有字段,而不要调用公共属性? – jcgarciam
我发现了以下内容:(如何在“getter”或“setter”之后编写自定义逻辑?)但在本文的链接中会引发404 :(http://blogs.msdn.com/b/dsimmons/archive/ 2008/08/10/EF-FAQ-实体classes.aspx – jcgarciam