3 つの異なるクラスと、異なる種類のアドレスを格納する 1 つの基本クラスを作成しました。基本クラスは、User (現在の住所が添付されている) と Post に関連する郵便番号で、郵便番号と都市に関する情報が含まれています。
public class PostalAddress
{
public virtual User User { get; set; }
public DateTime LastUsed { get; private set; }
public string OrientationNumber { get; set; }
public int UserId { get; set; }
public int PostId { get; set; }
public int Id { get; set; }
public virtual Post Post { get; private set; }
public string Street { get; set; }
}
public class Post
{
public Post()
{
InvoicingAddresses = new List<InvoicingAddress>();
ShippingAddresses = new List<ShippingAddress>();
UserAddresses = new List<UserAddress>();
}
public virtual City City { get; set; }
public virtual ICollection<InvoicingAddress> InvoicingAddresses { get; private set; }
public virtual ICollection<ShippingAddress> ShippingAddresses { get; private set; }
public virtual ICollection<UserAddress> UserAddresses { get; private set; }
public int CityId { get; set; }
public int Id { get; set; }
public string ZipCode { get; set; }
}
クラス PostalAddress はクラス PostalAddressMap を使用してマップされます
public class PostalAddressMap : EntityTypeConfiguration<PostalAddress>
{
public PostalAddressMap()
{
// Primary Key
HasKey(t => t.Id);
// Properties
// Table & Column Mappings
ToTable("PostalAddress");
Property(t => t.Id).HasColumnName("Id");
Property(t => t.LastUsed).HasColumnName("LastUsed").HasColumnType("datetime2");
Property(t => t.OrientationNumber).HasColumnName("OrientationNumber");
Property(t => t.UserId).HasColumnName("UserId");
Property(t => t.PostId).HasColumnName("PostId");
Property(t => t.Street).HasColumnName("Street");
// Relationships
HasRequired(t => t.Post).WithMany(t => t.InvoicingAddresses).HasForeignKey(d => d.PostId);
HasRequired(t => t.User)
.WithMany(t => t.UserAddressess)
.HasForeignKey(d => d.UserId);
}
}
クラス InvoicingAddress、ShippingAddress、および UserAddress は、階層ごとのテーブルアプローチを使用して PostalAddress クラスから継承されます。線を使って関係を設定したい場合
HasRequired(t => t.Post).WithMany(t => t.InvoicingAddresses).HasForeignKey(d => d.PostId);
コンパイラ エラーが表示されます 型 'System.Collections.Generic.ICollection<InvoicingAddress>' を 'System.Collections.Generic.ICollection<PostalAddress>' に暗黙的に変換できません。明示的な変換が存在します (キャストがありませんか?)
PostalAddress 子クラスと他の TPT タイプとの間に外部キーを設定する方法を教えてください。
役立つ回答をありがとうございます。