单独的标识列CodeFirst mvc

时间:2015-10-28 04:13:03

标签: sql asp.net-mvc-5 data-annotations code-first

我正在使用CodeFirst方法开发mvc5应用程序。这是模态类

public class Feeder
{
    [Key]   
    public int FeederId { get; set; }

    public string FeederName { get; set; }

    public string FeederCode { get; set; }


    public DateTime StatusChangeDate { get; set; }

    public int CreateBy { get; set; }

    public DateTime CreatedDate { get; set; }

    public int EditBy { get; set; }

    public DateTime EditDate { get; set; }
}

这里适用于' FeederCode'我想生成一个字符串,为每个记录增量。字符串应该是这样的。

BMK15FEDR00001

这里' BMK'和' FEDR'是固定的。但是15(2015年的最后2位数)将根据年份而变化。由于这是2015年,它应该是15,并且对于明年的记录它是16&00; 00001'应该为每个记录增加00002,00003 ....

我搜索了这个,但无法想出正确的方法。所有帮助赞赏。谢谢!

1 个答案:

答案 0 :(得分:2)

为什么不将它作为计算值? 您说BMKFEDR是常量,您可以从CreatedDate中提取年份,并且就最后一部分而言,您的FeederId已设置为自动生成默认情况下,SQL正在为您做到这一点。 现在,您的计算值应保存为:  `“BMK”+ CreatedDate.ToString(“yy”)+“FEDR”+ FeederId;

这是您在FeederCode值中保存的内容。

希望这就是你的意思。

如果您还希望每年的代码再次从1开始,则应设置复合主键,其他值为年份。你也可以重置身份值,你可以阅读here它是如何完成的(c部分)。

有关ID值的更新:

USE AdventureWorks2012;
GO
DBCC CHECKIDENT ('Person.AddressType', RESEED, 10);
GO

如所附链接所示:

  

以下示例强制将AddressType表中AddressTypeID列中的当前标识值强制为10.因为该表具有现有行,所以插入的下一行将使用11作为值,即新的当前增量为列值加1定义的值。

如果这对你不重要,我建议你避免它。如果它是你可以用它来满足你的需求。实现此目的的最佳方法是触发每年将重置自动标识符的SQL事件。