Consider the following class. It tries to protect the access to the _assignedTrays.
Actually, it works perfectly, since EF automatically links the backing field _assignedTrays
to the property AssignedTrays
- by convention (msdn)
public class Rack
{
private List<Tray> _assignedTrays = new List<Tray>();
private Rack()
{
}
public Rack(string rackId)
{
this.Id = rackId;
}
public string Id { get; private set; }
public IReadOnlyList<Tray> AssignedTrays => this._assignedTrays.AsReadOnly();
public void Assign(params Tray[] trays)
{
this._assignedTrays.AddRange(trays);
}
}
The problem is, that our coding styles forbid the use of underscores in variable names ;-)
According to other code examples (here) it should be possible to just rename _assignedTrays
to assignedTrays
and just explicitly inform EF about that change in the OnModelCreating
:
modelBuilder.Entity<Rack>(e =>
{
e.Property(t => t.AssignedTrays).HasField("assignedTrays");
});
But that gives me the following exception:
System.InvalidOperationException: The property 'Rack.AssignedTrays' is of type 'IReadOnlyList<Tray>' which
is not supported by current database provider. Either change the property CLR type or ignore the property
using the '[NotMapped]' attribute or by using 'EntityTypeBuilder.Ignore' in 'OnModelCreating'.
What am I missing here? Shouldn't it work?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…