在我的数据访问层中,我有实体组件和存储库组件。在实体程序集中,我有地址类
public class Address
{
public int AddressId {get; set;}
public string StreetAddress {get; set;}
public string City {get; set;}
public int StateId {get; set;} // foreign key to State table
public int CountryCode {get; set;} // foreign key to Country table
public bool Validate()
{
// I can verify the StreetAddress and City for empty string and maxlength here
// but how can I verify the StateId and CountryCode here?
}
}
在引用实体程序集的Repository程序集中,我有Address Repository。我不使用实体框架,但使用Dapper数据库操作。
public class AddressRepository : IAddressRepository
{
public int Create(Address address)
{
if (address == null) throw new ArgumentNullException(nameof(address));
if (address.Validate())
{
// ... create address here ...
}
}
}
和上面的代码一样,我的Address实体不能调用任何存储库方法,比如StateRepository。Get(int stateId)来验证stateId(或CountryCode的CountryRepository),因为这将成为一个循环引用。当然,如果StateId和CountryCode在各自的表中不是有效的条目,SQL Server将抛出FK约束异常,但如果可能的话,希望避免这种情况。我在这个架构中做错了什么?谢谢你!
您的环境是DI环境吗?如果是这样,你可以实现IValidatableObject,然后使用ValidationContext对象的GetService方法。
看看这个链接可以更好地理解我的意思:验证