外键属性“fk1”是在影子状态下创建的,因为与简单名称“property”的属性发生冲突

问题描述 投票:0回答:2

我正在使用代码优先和实体框架核心创建数据库,我有 1:1 关系,但在这种关系中,我在两个实体中都有导航属性,这是我的第一个实体:

public class User
    {
        [Key]
        public string Email { get; set; }
        public virtual Mac Mac { get; set; }
        public virtual Gender Gender { get; set; }        
    }

这是我的第二个实体:

public class Mac
    {
        [Key]
        public Guid Id { get; set; }
        public DateTime CreationDate { get; set; }
        public HashSet<MacsUsers> MacsUsers { get; set; }
        public string UserEmail { get; set; }
        public User User { get; set; }
    }

这是我的 dbContext 配置:

builder.Entity<User>().HasOne(u => u.Mac)
                .WithOne()
                .HasForeignKey<Mac>(g => g.UserEmail);

我在两个实体中都有这些导航属性的原因是我有一个查询,在其中我使用用户实体从 Mac 检索数据,如下所示:

foreach (var item in ListTupla)
                {
                    item.CreationDate = listUser.FirstOrDefault(u => u.Mac.Id == item.MacId).Mac.User.CreationDate;
                    item.MacUserTalked = listUser.FirstOrDefault(u => u.Mac.Id == item.MacId).Mac.User.Email;//here Mac.User
                    item.MacUserWhoTalks = listUser.FirstOrDefault(u => u.Mac.Id == item.MacId).Email;
                    item.Name = listUser.FirstOrDefault(u => u.Mac.Id == item.MacId).Mac.User.Name; //here Mac.User

这正是消息警告:外键属性“Mac.UserEmail1”是在影子状态下创建的,因为实体类型中存在简单名称“UserEmail”的冲突属性,但要么未映射,要么已用于另一个属性关系,或者与关联的主键类型不兼容。有关 EF Core 中映射关系的信息,请参阅 https://aka.ms/efcore-relationships

我找到了一个解决方案,将 virtual 放在导航属性中,但它对我不起作用,有什么评论吗?

c# entity-framework-core relationship .net-6.0 code-first
2个回答
1
投票
我在参考导航属性前面添加了 public

virtual

,它解决了问题。
See this image please


0
投票
我的关系是,一个项目有许多 fileDataLink,并且 fileDataLink 具有返回项目的导航属性。它需要有一对多的关系来定义展位方式。 Fluent API 需要定义关系以不创建阴影导航属性,例如ProjectId1,如下所示。

modelBuilder.Entity<Project>() .HasMany( e => e.FileDataLinks ) .WithOne( e => e.Project ) .HasForeignKey( e => e.ProjectId ) .HasPrincipalKey( e => e.Id ) .OnDelete( DeleteBehavior.NoAction ); modelBuilder.Entity<FileDataLink>() .HasOne( s => s.Project ) .WithMany( g => g.FileDataLinks ) .HasForeignKey( s => s.ProjectId ) .OnDelete( DeleteBehavior.NoAction );
    
© www.soinside.com 2019 - 2024. All rights reserved.