更新:请注意,我知道我不能这样做……这是我真正希望能够做到的。也许还有其他方式可以分开责任,不是吗?所以我要找的是...
Entity Framework 将多个职责强制到类中(常规逻辑、基本注释和 CRUD 接口能力)。我只想采用通常都在一个类中的东西......并通过实体框架和常规逻辑分离类的持久能力。
我的思考过程:最近我进入了实体框架,但不喜欢某些实体类做得太多的想法。逻辑、数据访问接口和实体框架注释。为了解决这个问题,我想让我的实体类文件部分化,并实现数据访问功能,使其远离类的其他方面。这很好用而且很干净!
当我这样做的时候,我认为使我的属性部分化,并使实现远离 EF 属性注释将是非常有益的!这将清理文件并允许单一责任。但是,这是不允许的!真可惜。
部分属性将像部分方法一样实现。一个部分属性中的定义,以及另一个部分属性中的实现......就像顶部链接中的照片建议(或评论)以及下面的代码一样。
public partial class Agency : PropertyValidator, IAgency
{
private string _name;
public partial string Name
{
get { return _name; }
set
{
// PropertyValidator stuff
if (string.IsNullOrEmpty(value))
AddErrorToProperty("Agency name must contain a reasonable alphanumeric value.");
if (string.IsNullOrWhiteSpace(value))
AddErrorToProperty("Agency name cannot contain all spaces.");
SetPropertyIfValid(ref _name, value);
}
}
}
然后是处理所有抽象数据库项目的另一个部分类......
public partial class Agency : IPersitentEntity, IAgency
{
[Key] // NOTE these Annotations are because of Entity Framework...nice separation!
public int ID { get; set; } // From IPersitentEntity
[Required]
[MinLength(3), MaxLength(50)]
public partial string Name { get; set; } // IAgency NOTE this is not valid, but the
// separation is amazing!
// From IPersitentEntity provide CRUD support
public void Create() { throw new NotImplementedException(); }
public void Retrieve(int id) { throw new NotImplementedException(); }
public void Update(int id) { throw new NotImplementedException(); }
public void Delete(int id) { throw new NotImplementedException(); }
}
现在,我必须将注释和逻辑结合在一起。这有点奇怪,因为我已经分离出抽象的数据库项目......除了 EF 注释!