proper structure of classes using interface classes
There no such thing like an interface class (term used in initial version of post). You have interfaces and classes implementing the interfaces.

I don't see any List&lt;Document&gt; in your code, but If you have defined the list as List&lt;IDocument&gt;, you must stick to this definition. You cannot assign it a List&lt;Document&gt;. But you can add Document objects to this list.

Generally two types T&lt;A&gt; and T&lt;B&gt; are not assignment compatible, even if A and B are assignment compatible. An exception is when the in or out keywords are used in generic interfaces. But this can only be done if the generic type occurs exclusively as input or exclusively as output as explained in Variance in C#.NET 4.0 Covariance and Contravariance.

I would convert the list properties Documents and Pages to getter-only properties.

public interface IPortfolio
{
    string FirstName { get; set; }
    string LastName { get; set; }
    string Name { get; set; }
    int Id { get; set; }
    List&lt;IDocument&gt; Documents { get; }
}


And create the class like this

public class Portfolio : IPortfolio
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Name { get; set; }
    public int Id { get; set; }
    public List&lt;IDocument&gt; Documents { get; } = new List&lt;IDocument&gt;();
}


This makes the Documents property read-only. The list itself remains read/write.

var portfolio = new Portfolio();
portfolio.Documents.Add(new Document());