asp.net-core - 将默认表鉴别器字段添加到实体 - 鉴别器字段为空
问题描述
我有一个按层次结构的表架构,因此默认情况下我将鉴别器字段添加到我的表中,这是一个 varchar。我正在尝试将此字段添加到我的实体并在 http 响应中将其发送回客户端。
我已将其添加到我的基本实体中:
[Serializable]
public abstract class DomainEntity<TId> : IDomainEntity<TId>
{
[Key]
public TId Id { get; set; }
public string Discriminator { get; set; }
}
在数据上下文中:
// Vegan Item (this is an abstract class with several concrete subclasses)
modelBuilder.Entity<VeganItem>(veganItem =>
{
veganItem.HasIndex("CompanyName", "Name", "Discriminator").IsUnique();
veganItem.HasDiscriminator<string>("Discriminator");
veganItem.Property(u => u.CreatedDate)
.HasDefaultValueSql("CURRENT_TIMESTAMP");
veganItem.Property(u => u.UpdatedDate)
.HasDefaultValueSql("CURRENT_TIMESTAMP");
veganItem.HasKey(e => e.Id);
veganItem.HasOne(q => q.UpdatedBy)
.WithMany()
.HasForeignKey(k => k.UpdatedById);
veganItem.HasOne(q => q.CreatedBy)
.WithMany()
.HasForeignKey(k => k.CreatedById);
veganItem.Property(e => e.Tags)
.HasConversion(
v => JsonSerializer.Serialize(v, null),
v => JsonSerializer.Deserialize<List<Option>>(v, null),
new ValueComparer<IList<Option>>(
(c1, c2) => c1.SequenceEqual(c2),
c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())),
c => (IList<Option>)c.ToList()));
});
// Vegan Item Establishments (these are concrete classes, I just had to do it that way to get the generics right.)
modelBuilder.Entity<GroceryItemEstablishment>(giEstablishment =>
{
giEstablishment.HasIndex(g => new { g.VeganItemId, g.EstablishmentId }).IsUnique();
giEstablishment.HasDiscriminator<string>("Discriminator");
giEstablishment.Property(u => u.CreatedDate)
.HasDefaultValueSql("CURRENT_TIMESTAMP");
giEstablishment.Property(u => u.UpdatedDate)
.HasDefaultValueSql("CURRENT_TIMESTAMP");
giEstablishment.HasOne(g => g.VeganItem)
.WithMany(vi => vi.VeganItemEstablishments)
.HasForeignKey(g => g.VeganItemId);
giEstablishment.HasOne(g => g.Establishment)
.WithMany(e => e.VeganItemEstablishments)
.HasForeignKey(g => g.EstablishmentId);
giEstablishment.HasOne(q => q.UpdatedBy)
.WithMany()
.HasForeignKey(k => k.UpdatedById);
giEstablishment.HasOne(q => q.CreatedBy)
.WithMany()
.HasForeignKey(k => k.CreatedById);
});
modelBuilder.Entity<MenuItemEstablishment>(miEstablishment =>
{
miEstablishment.HasIndex(m => new { m.VeganItemId, m.EstablishmentId }).IsUnique();
miEstablishment.Property(u => u.CreatedDate)
.HasDefaultValueSql("CURRENT_TIMESTAMP");
miEstablishment.HasDiscriminator<string>("Discriminator");
miEstablishment.Property(u => u.UpdatedDate)
.HasDefaultValueSql("CURRENT_TIMESTAMP");
miEstablishment.HasOne(m => m.VeganItem)
.WithMany(vi => vi.VeganItemEstablishments)
.HasForeignKey(m => m.VeganItemId);
miEstablishment.HasOne(m => m.Establishment)
.WithMany(e => e.VeganItemEstablishments)
.HasForeignKey(m => m.EstablishmentId);
miEstablishment.HasOne(q => q.UpdatedBy)
.WithMany()
.HasForeignKey(k => k.UpdatedById);
miEstablishment.HasOne(q => q.CreatedBy)
.WithMany()
.HasForeignKey(k => k.CreatedById);
});
GroceryItemEstablishment
但是当我在数据中收到一个带有 a 的 POST 请求时,它GroceryItemEstablishment
有一个空Discriminator
字段,但它veganItem
是一个字段,它有一个填充Discriminator
字段。任何想法为什么其中一个为空?
它填充在数据库中:
解决方案
推荐阅读
- php - 将数据发送到 jquery 以模式显示
- blueprism - 如何在 Blue Prism 的流程编辑器中在 Pointer 和 Link 之间切换
- docker - 删除核心(集合)后如何删除所有字段
- php - 使用 php 从数据库动态创建元标记
- angular - ng-select 获取对象作为选定值
- java - 如何使用 java ews api 将电子邮件标记为已读
- javascript - 如何使用 axios 将图像和数据从客户端发送到 nodejs 服务器
- vba - Word|VBA - Range.Goto - 如何使其正常工作?
- mysql - 在mysql中备份整个数据库
- javascript - 如何使like和addtocart图标切换外观