代码之家  ›  专栏  ›  技术社区  ›  Diego

net core 2.0 automapper将identity属性设置为null

  •  0
  • Diego  · 技术社区  · 6 年前

    我正在做一个 net core 2.0 使用应用程序 Entity Framework .

    我正在使用 AutoMapper 将数据从一个实体复制到另一个实体。

    public class Entity1
        {
         public int OrderID { get; set; }
         public int MarketID { get; set; }
         }
    
    public class Entity2
        {
        [Key]
         public int MarketOrderID { get; set; }
         public int OrderID { get; set; }
         public int MarketID { get; set; }
         }

    财产 Entity2.MarketOrderID 定义为标识。

    AutoMapper很简单。

     CreateMap<Entity1, Entity2>()
    

    我这样将Entity2保存到数据库中。

      public void Insert(Entity1 item)
    {
      Entity2 _entity2 = new Entity2();
      Mapper.Map<Entity1, Entity2>(item, _entity2);
      _context.Entity2.Add(_entity2);
      _context.SaveChanges();
      }

    Entity2.MarketOrderID 设置为零(0)。 和在线 _context.SaveChanges(); 因此给了我一个错误。你好,

    我有两个实体,我使用 应该是这样的 null .

    我试图在映射中设置null设置

    .ForMember(x => x.MarketOrderID, opt => opt.Ignore());
    

    但它不起作用。

    如何将标识设置为null?

    1 回复  |  直到 6 年前
        1
  •  2
  •   KrzysztofG06    6 年前

    不能将标识设置为null,因为它是主键。您应该尝试保持id属性的映射忽略。尝试使用fluent api设置自动递增id:

    modelBuilder.Entity<Foo>()
                .Property(f => f.Id)
                .ValueGeneratedOnAdd();
    

    或带有批注:

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
         public int BlogId { get; set; }
    

    文档-> https://docs.microsoft.com/en-us/ef/core/modeling/generated-properties

    如果将id更改为GUID,可以尝试:

    CreateMap<Entity1, Entity2>()
         .ForMember(x => x.MarketOrderID, m => m.MapFrom(p => Guid.NewGuid()))