我正在使用EF Core与Postgres数据库进行C#项目。我需要将序列化数据从数据库发送到消息代理。数据将在每个月的特定时间发送。例如,有100条数据记录,它们今天发送。这些数据记录将具有cID(连续ID)从1到100。下个月,这100条记录将再次发送。但是然后cID应该从101到200开始。
这就是它应该的样子
的数据
下面是一个示例模型:
[Table("institutions")]
public partial class Institution
{
public Institution()
{
InstitutionResources = new HashSet<InstitutionResource>();
}
[Key]
[Column("id")]
public int Id { get; set; }
public int AddressId { get; set; }
[Column("phone")]
[StringLength(20)]
public string Phone { get; set; }
[Column("email_address")]
[StringLength(255)]
public string EmailAddress { get; set; }
[ForeignKey(nameof(AddressId))]
[InverseProperty("Institutions")]
public virtual Address Address { get; set; }
[InverseProperty(nameof(InstitutionResource.Institution))]
public virtual ICollection<InstitutionResource> InstitutionResources { get; set; }
}
字符串
到目前为止,我已经给table编号了:
public List<InstitutionDataResult> FormInstitutionDataResult()
{
long cID = 1; // Here I want cID was continuous
var institutions = _dbContext.Institutions
.Select(s => new InstitutionDataResult
{
//CID = there should be an id
Id = s.Id, // it is an id from the table
NameKk = s.InstitutionResources.Where(l => l.LanguageId == 1).SingleOrDefault().Name,
NameRu = s.InstitutionResources.Where(l => l.LanguageId == 2).SingleOrDefault().Name,
Geoposition = s.Address.Geoposition.ToString(),
Phone = s.Phone,
Email = s.EmailAddress,
Date = DateTime.Now.ToString("dd.MM.yyyy")
}).ToList();
//
foreach (var institution in institutions)
{
institution.CID = cID;
cID++;
}
return crosswalks;
}
型
有人暗示我可以使用postgres序列,但我不知道如何使用它们
1条答案
按热度按时间djp7away1#
在实体框架中,默认情况下,
long Id
属性将被解释为主要的自动递增键。零值将被解释为一个新对象,该对象将在保存时分配一个新的ID。您可以手动指定特定的ID,但如果不小心,这可能会扰乱数据库的内部序列。
但是你不应该对自动生成的值做任何具体的假设,除了唯一性,并且可能随时间单调增加。如果你需要Id有一些特殊的关系,比如batch 1有1-100,batch 2有101-200,你可能更好地明确表达这种关系,例如,通过使用单独的Id和BatchId字段。如果需要,您可以将它们合并组合成一个复合键。我不是数据库Maven,但我可能会使用内部主自动递增键,并对来自外部源的任何数据使用(复合)代理键。只要确保清楚地标记列,这样你就不会混淆在不同上下文中使用的ID。