「サイド」を含む「カード」というクラスがあります。
両方のエンティティには、ステージ (3 つのステージのうちの 1 つ) があります。
ここに私のカードエンティティがあります:
public class Card
{
public Card()
{
Sides = new Collection<Side>();
Stage = Stage.ONE;
}
[Key]
[Required]
public virtual int CardId { get; set; }
[Required]
public virtual Stage Stage { get; set; }
[Required]
[ForeignKey("CardId")]
public virtual ICollection<Side> Sides { get; set; }
}
これが私のサイドエンティティです:
public class Side
{
public Side()
{
Stage = Stage.ONE;
}
[Key]
[Required]
public virtual int SideId { get; set; }
[Required]
public virtual Stage Stage { get; set; }
[Required]
public int CardId { get; set; }
[ForeignKey("CardId")]
public virtual Card Card { get; set; }
}
そして、これが私のStageエンティティです:
public class Stage
{
// Zero
public static readonly Stage ONE = new Stage(new TimeSpan(0, 0, 0), "ONE");
// Ten seconds
public static readonly Stage TWO = new Stage(new TimeSpan(0, 0, 10), "TWO");
public static IEnumerable<Stage> Values
{
get
{
yield return ONE;
yield return TWO;
}
}
public int StageId { get; set; }
private readonly TimeSpan span;
public string Title { get; set; }
Stage(TimeSpan span, string title)
{
this.span = span;
this.Title = title;
}
public TimeSpan Span { get { return span; } }
}
新しいカードまたはサイドを作成すると、ステージ テーブルに「ONE」のタイトルと自動インクリメント ID を持つ新しいエントリが作成されることに気付きましたが、これは発生すべきではありません。ステージ テーブルには 2 つのステージのみが存在する必要があります。Stage は基本的に、いくつかの値 (Title と Span) を持つ列挙型です。
新しいステージが追加されないようにするにはどうすればよいですか? 関連する場合に備えて、EF CodeFirstを使用しています。
Honzaの応答に基づく更新:
public class Stage
{
[Key]
public virtual int StageId { get; set; }
public string Name { get; set; }
public TimeSpan Span { get; set; }
public static class Values
{
public static readonly Stage ONE = new Stage()
{
StageId = 0,
Name = "ONE",
Span = new TimeSpan(0, 0, 0)
};
public static readonly Stage TWO = new Stage()
{
StageId = 1,
Name = "TWO",
Span = new TimeSpan(0, 0, 10)
};
}
それでも自動インクリメントです-何が欠けていますか?