【发布时间】:2020-05-09 15:37:58
【问题描述】:
我遇到了异常
System.InvalidOperationException : No backing field could be found for property 'ApartmentId' of entity type 'Address' and the property does not have a getter.
这是我的Apartment 班级:
public class Apartment
{
public Apartment(Address address)
{
Address = address;
}
private Apartment()
{
}
public int Id { get; private set; }
public Address Address { get; private set; }
}
这是我的Address 值对象类:
public class Address : IEquatable<Address>
{
private Address()
{
}
public Address(string streetNumber, string streetName, string city, string state, string zipCode)
{
StreetNumber = streetNumber;
StreetName = streetName;
City = city;
State = state;
ZipCode = zipCode;
}
public string StreetNumber { get; private set; }
public string StreetName { get; private set; }
public string City { get; private set; }
public string State { get; private set; }
public string ZipCode { get; private set; }
public bool Equals(Address other)
{
if (ReferenceEquals(null, other))
{
return false;
}
if (ReferenceEquals(this, other))
{
return true;
}
return String.Equals(StreetNumber, other.StreetNumber, StringComparison.OrdinalIgnoreCase) &&
String.Equals(StreetName, other.StreetName, StringComparison.OrdinalIgnoreCase) &&
String.Equals(City, other.City, StringComparison.OrdinalIgnoreCase) &&
String.Equals(State, other.State, StringComparison.OrdinalIgnoreCase) &&
String.Equals(ZipCode, other.ZipCode, StringComparison.OrdinalIgnoreCase);
}
}
在我的实体配置中,我使用builder.OwnsOne(a => a.Address);。在我的存储库中,我进行了以下调用:
public async Task<Apartment> GetByAddressAsync(Address address)
{
return await _context.Apartments.FirstOrDefaultAsync(a => a.Address.Equals(address));
}
它会产生上述异常。有任何想法吗?我不知道为什么它说我的 Address 值对象中有一个“ApartmentId”。
【问题讨论】:
-
看一下生成的表结构,Address表中有一个ApartmentId。 EF 需要该字段来记住该地址行属于哪个 Apartment
-
@SirRufo
Address是嵌入在Apartment表中的owned entity type,因此既没有Address表也没有AddressId列。