gpt4 book ai didi

c# - 如何使用 EntityFramework 构建富领域模型

转载 作者:太空宇宙 更新时间:2023-11-03 16:39:51 27 4
gpt4 key购买 nike

我使用 Entity Framework 4.2(Code First)创建我的数据库,到目前为止工作正常,但现在我面临一个在 Hibernate 或 JPA 中很容易克服的问题,但我在这里看不到它。

我已经定义了一个 User 对象,它有一个名为 Password 的属性,我想自定义 {get;set;} 操作以便在设置密码时具有一定的逻辑(我想存储它的哈希版本,但是我希望在我的域对象 ala DDD 中包含该逻辑)。但是我面临着当从数据库中具体化一个对象时我的 setter 被调用并且没有直接使用私有(private)字段。

我正在尝试构建一个丰富的领域对象模型并在此避免 DAO/存储库模式。

这是否可以通过 Entity Framework 实现,或者我将被迫使用 DAO/Repository 模式。

下面是我的用户对象的提取:

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;

}

最佳答案

首先添加一个加密的密码字符串值对象(不可变的)

例如

public class EncryptedString
{
public string Value { get;private set; }
public string Hash { get;private set; }
bool Validate(string password);

public Encrypted(string value)
{
// Put logic here
}
}

在 EF 中它被称为复杂类型

关于c# - 如何使用 EntityFramework 构建富领域模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8004752/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com