2

メイン エンティティのバージョン番号 (1.1、1.3、2.15 など) を維持したいと考えています。1.1 を保存する必要があるため、10 進数を使用してバージョンを保存することはできません。10 進数を使用すると、1.100 として保存されます。したがって、バージョン番号を操作し、必要に応じてメジャー/マイナー/完全な番号を返す小さなバージョン コントローラー クラスを作成し、それをデータベースの varchar 列にマップすることを計画しています。

例:

public class Item
{
    public Guid Id {get;set;}

    public string Name {get;set;}

    **// I want to map this property with the varchar column in the database**
    public Version Version {get;set;}
}

public class Version
{
    public string FullVersion {get;set;}

    public string Major {get;set;}

    public string Minor {get;set;}

    public void IncrementMinor()
    { // some logic }

    public void IncrementMajor()
    { // some logic }

    public override string ToString()
    {
        return FullVersion;
    }
}

なにか提案を?

4

1 に答える 1

4

エンティティとして定義しない場合Version(つまり、コンテキストで db セットを宣言する場合)、デフォルトでは複合型として格納されます。したがって、Itemエンティティを保存すると、データベースに次のフィールドが表示されます。

 Id
 Name
 Version_FullVersion
 Version_Major
 Version_Minor

あなたがする必要があるのは、主要なプロパティとマイナーなプロパティをマップされていないものとしてマークし、完全なバージョンのプロパティにきれいな名前を付けるだけです:

public class Version
{
    [Column("Version")]
    public string FullVersion 
    {
        get { return String.Format("{0}.{1}", Major, Minor); }
        set
        {
            var parts = value.Split('.');
            Major = parts[0];
            Minor = parts[1];
        }
    }
    [NotMapped]
    public string Major { get; set; }
    [NotMapped]
    public string Minor { get; set; }
    // ...
}

これにより、正確に 3 つの列が生成されます。

 Id
 Name
 Version

ところで、メジャー バージョン フィールドとマイナー バージョン フィールドに整数型を使用することを検討してください。


別のオプション - バージョン プロパティをマップしないようにし、文字列のバージョン値を格納するプロパティを追加します。

public class Item
{
    public Guid Id { get; set; }
    public string Name { get; set; }

    [NotMapped]
    public Version Version { get; set; }

    [Column("Version")]
    public string VersionValue
    {
        get { return Version != null ? Version.ToString() : null; }
        set { Version = Version.Parse(value); }
    }
}

Parseクラスにメソッドを追加しますVersion(バージョン文字列からバージョン インスタンスを作成します)。

于 2013-07-02T06:34:29.530 に答える