我们有一个项目,我们将其拆分为多个项目解决方案。我们将采用实体并将其放入新的装配中
当前项目具有EF Core和ModelMetadata以及其他属性和方法。
namespace Project.Models.Entities
{
[ModelMetadataType(typeof(ContactsMetaData))]
public partial class Contacts
{
internal class ContactsMetaData
{
[EmailAddress]
public string Email { get; set; }
}
[NotMapped]
public string IsValid { get {return !string.IsNullOrEmpty(Email);} }
}
}
由于我们不能从其他程序集中扩展部分类,因此将无法使用。我正在寻找另一种解决方案来做到这一点。我试图扩大班级,但没有用... 谁能给我指出一个更好的解决方案?
答案 0 :(得分:0)
我认为这样做的方法不止一种,您必须做出一些设计决策。我假设您希望存储库程序集只关心通过实体框架访问数据库。但是业务对象需要其他属性,例如电子邮件地址。您可以将数据库对象与域对象分离。您可以从描述联系人实体的界面开始。
public interface IContact
{
// properties based on the Contacts you are working with
}
然后,您可以在存储库程序集中使用部分类来声明Contacts
实现了IContact
接口。
public partial class Contacts : IContact
{
}
但是您确实需要与电子邮件联系,因此请通过另一个界面描述该要求。
public interface IContactWithEmail
{
string FirstName { get; set; }
string LastName { get; set; }
string Email { get; set; }
}
并在实现中注入IContact
依赖项。
public class ContactWithEmail : IContactWithEmail
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public ContactWithEmail(IContact contact, string email)
{
FirstName = contact.FirstName;
LastName = contact.LastName;
Email = email;
}
}
答案 1 :(得分:0)
您在这里错过的是继承的整个概念。
在这里您可以找到一些有用的信息以及一般的面向对象编程:
https://en.wikipedia.org/wiki/Object-oriented_programming
https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)