我希望能够在数据库中查找信息,并根据结果为实体的其中一个字段生成默认值。
问题是,我不知道如何将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";
}
}
答案 0 :(得分:0)
使用EntityEntry entry
填充NextValue()参数DbContext entry.Context
。
protected override object NextValue(EntityEntry entry)
{
WellWaterEntities db = (WellWaterEntities) entry.Context;
...
}