将单个项目拆分为多个项目解决方案

时间:2018-11-16 16:09:47

标签: c# entity-framework asp.net-core ef-core-2.1

我们有一个项目,我们将其拆分为多个项目解决方案。我们将采用实体并将其放入新的装配中

当前项目具有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);} }

    }
}

由于我们不能从其他程序集中扩展部分类,因此将无法使用。我正在寻找另一种解决方案来做到这一点。我试图扩大班级,但没有用... 谁能给我指出一个更好的解决方案?

2 个答案:

答案 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)