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?
internalAssignedTrays
and add a comment as to why you can't call it something else so it will pass a code review. – SharecropProperty
method is not for navigation properties), but there is no need to, since EF Core convention supports your naming style. – Nepheline<camel-cased property name>
(the default C# backing field naming convention) is also supported - probably with highest priority. – NephelineHasField
configuration, but I blamed it on 'incomplete tests'... – Skimpy