在更改物體、添加或洗掉屬性后,向查詢中添加了一個“隨機”列,這會導致問題。
Npgsql.PostgresException (0x80004005): 42703: column u.UserOldId does not exist
我正在查詢這個物體
[Table("user_visuals", Schema = "present")]
public class UserVisual
{
#region Columns
[Key]
[Column("user_visual_id")]
public long Id { get; set; }
[Column("user_id")]
public long UserId { get; set; }
[Column("visual_id")]
public long VisualId { get; set; }
[Column("render_position")]
public int RenderPosition { get; set; }
#endregion
#region Relations
public Visual Visual { get; set; } = default!;
//public UserOld User { get; set; } = default!;
#endregion
}
經過一番調查,我發現背景關系以某種方式包含影子 FK 并嘗試查詢它,盡管它不存在

似乎背景關系有關于它的這種資訊
EntityType: UserVisual
Properties:
Id (long) Required PK AfterSave:Throw ValueGenerated.OnAdd
Annotations:
Npgsql:ValueGenerationStrategy: IdentityByDefaultColumn
Relational:ColumnName: user_visual_id
RenderPosition (int) Required
Annotations:
Npgsql:ValueGenerationStrategy: None
Relational:ColumnName: render_position
UserId (long) Required FK Index
Annotations:
Npgsql:ValueGenerationStrategy: None
Relational:ColumnName: user_id
UserOldId (no field, long?) Shadow FK Index
Annotations:
Npgsql:ValueGenerationStrategy: None
VisualId (long) Required FK Index
Annotations:
Npgsql:ValueGenerationStrategy: None
Relational:ColumnName: visual_id
Navigations:
Visual (Visual) ToPrincipal Visual Inverse: UserVisuals
Keys:
Id PK
Foreign keys:
UserVisual {'UserId'} -> User {'Id'} ToDependent: Visuals Cascade
UserVisual {'UserOldId'} -> UserOld {'Id'} ToDependent: Visuals ClientSetNull
UserVisual {'VisualId'} -> Visual {'Id'} ToDependent: UserVisuals ToPrincipal: Visual Cascade
Indexes:
UserId
UserOldId
VisualId
Annotations:
DiscriminatorProperty:
Relational:FunctionName:
Relational:Schema: present
Relational:SqlQuery:
Relational:TableName: user_visuals
Relational:ViewName:
Relational:ViewSchema:
背景關系配置
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<UserIdentity>()
.HasKey(x => x.Id);
modelBuilder.Entity<UserRole>()
.HasKey(x => x.Id);
modelBuilder.Entity<IdentityUserRole<long>>().HasKey(p => new { p.UserId, p.RoleId });
modelBuilder.Entity<UserVisual>().HasOne<Visual>(x => x.Visual).WithMany(x => x.UserVisuals).HasForeignKey(x => x.VisualId);
modelBuilder.Entity<UserDevice>().HasOne<Device>(x => x.Device).WithMany(x => x.UserDevices).HasForeignKey(x => x.DeviceId);
modelBuilder.Entity<Device>().HasOne<DeviceType>(x => x.DeviceType).WithMany(x => x.Devices).HasForeignKey(x => x.TypeId);
}
沒有想法,我該怎么辦?
uj5u.com熱心網友回復:
幻影陰影 FK 通常通過流式 API 指示某些關系配置錯誤,或者像在這種情況下,由 EF Core 默認約定創建的關系。
請注意,其中一個物體中的單個導航屬性足以暗示模型中的關系。因此,即使您從依賴物體(UserOld Userin UserVisual)中洗掉了參考導航屬性,如果主體型別(UserOld在這種情況下)仍然包含在模型中,并且具有參考依賴物體型別(ICollection<UserVisual或類似)的集合導航屬性,則 EF Core 仍然考慮與傳統影子 FK 的關系。
因此,請始終檢查其他物體導航屬性中物體類的用法(查找所有參考),并洗掉不打算創建關系的物體類。此外(即使這里不是這種情況)正確配對Has/ With` 呼叫不會將現有導航屬性排除在流暢配置之外,從而創建額外的常規關系。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/507012.html
標籤:C# 。网 PostgreSQL 实体框架 实体框架核心
下一篇:EF創建表關系不存在C#
