当我添加相关实体时,实体状态被修改后未添加

时间:2020-08-09 10:06:04

标签: .net-core ef-core-3.0

Microsoft EFCore 添加一个相关实体Demo一样,它可以正常工作。但是我将键类型更改为Guid,将实体添加到集合导航属性后,子实体状态将被修改,为什么不添加?

数据库不包含数据,因此EFCore引发更新异常。

public class Program
{
    static void Main(string[] args)
    {
        using var dbContext = new TestDbContext();
        var userId = new Guid("332DA567-1CF8-48DD-9424-1AD49FD6CF39");
        //init root entity first
        //var user = new AppUser(
        //    userId,
        //    "testUserName");
        //dbContext.Add(user);
        //dbContext.SaveChanges();
        var user = dbContext.AppUsers
            .Include(x => x.AppUserConfigs)
            .Where(x => x.Id.Equals(userId))
            .FirstOrDefault();

        var userConfig = new AppUserConfig(Guid.NewGuid(),userId,"6666");
        user.AppUserConfigs.Add(userConfig);
        // there userConfig state is Modified, why not Added
        var entries = dbContext.ChangeTracker.Entries();
        // error on Save, bacause no data in database
        dbContext.SaveChanges();

        Console.ReadLine();
    }
}
  1. DbContext
public class TestDbContext : DbContext
{
    public DbSet<AppUser> AppUsers { get; set; }
    public DbSet<AppUserConfig> AppUserConfigs { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("Data Source =.;Initial Catalog=TestCode; User ID=sa;Password=*******;");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<AppUser>().ToTable("TB_AppUser");
        modelBuilder.Entity<AppUser>().HasKey(x => x.Id);
        modelBuilder.Entity<AppUser>().HasMany(x => x.AppUserConfigs).WithOne().HasForeignKey(x => x.UserId).OnDelete(DeleteBehavior.Restrict);

        modelBuilder.Entity<AppUserConfig>().ToTable("TB_AppUserConfig");
        modelBuilder.Entity<AppUser>().HasKey(x => x.Id);
    }
}
  1. AppUser实体
public class AppUser
{
    public Guid Id { get; protected set; }
    public string UserName { get; protected set; }

    public List<AppUserConfig> AppUserConfigs { get; protected set; }

    protected AppUser()
    { 
    }

    public AppUser(
        Guid id,
        string userName)
    {
        Id = id;
        UserName = userName;
        AppUserConfigs = new List<AppUserConfig>();
    }
}
  1. AppUserConfig实体
 public class AppUserConfig
{
    public Guid Id { get; protected set; }
    public Guid UserId { get; protected set; }
    public string CorporationId { get; protected set; }

    protected AppUserConfig()
    { 
    }

    public AppUserConfig(
        Guid id,
        Guid userId,
        string corporationId)
    {
        Id = id;
        UserId = userId;
        CorporationId = corporationId;
    }
}

0 个答案:

没有答案
相关问题