使用PropertyBuilder.HasValueGenerator并连接到数据库上下文

时间:2019-03-20 21:40:12

标签: asp.net-core entity-framework-core

我希望能够在数据库中查找信息,并根据结果为实体的其中一个字段生成默认值。

问题是,我不知道如何将EF上下文注入ValueGenerator的创建中。现在,我的操作方式需要无参数构造函数。

这是我到目前为止所拥有的。

在我的DbContext OnModelCreating中:

            entity.Property(e => e.SampleNumber)
                .HasColumnName("SampleNumber")
                .HasMaxLength(25)
                .HasValueGenerator<SampleIDGenerator>();

我的ValueGenerator:

public class SampleIDGenerator : Microsoft.EntityFrameworkCore.ValueGeneration.ValueGenerator
{
    public override bool GeneratesTemporaryValues => false;

    private readonly WellWaterEntities db;

    public SampleIDGenerator(WellWaterEntities context)
    {
        db = context;
    }

    protected override object NextValue(EntityEntry entry)
    {
        string lastitem = db.Samples.OrderByDescending(x => x.SampleNumber)
            .FirstOrDefault().SampleNumber;

        if (lastitem != null)
        {
            int lastSequence;
            if (int.TryParse(lastitem.Substring(5, 4), out lastSequence))
            {
                return lastitem.Substring(0, 5) + (lastSequence + 1).ToString("0000");
            }
        }
        return DateTime.Now.Year.ToString() + "-" + "0001";
    }
}

1 个答案:

答案 0 :(得分:0)

使用EntityEntry entry填充NextValue()参数DbContext entry.Context

    protected override object NextValue(EntityEntry entry)
    {
        WellWaterEntities db = (WellWaterEntities) entry.Context;

        ...
    }