2016-09-28 15 views
1

エンティティコードEntity Frameworkの

public class Degree { 
    public string Institution {get;set;} 
    public string Major {get; set;} 
    public Country Country {get; set;} 
    public Period StartOn {get; set;} 
    public Period EndOn {get; set;}  
} 

public class Period { 
    public int Year {get; set;} 
    public int Month {get; set;} 
    public bool IsPresent {get; set;} 
} 

DbContextコード

public class Context: DbContext 
{ 
    public DbSet<Degree> Degrees {get; set;} 

    public override void OnModelCreating(DbModelBuilder modelBuilder) 
    {   
     modelBuilder.Entity<Degree>() 
        .Property(t => t.StartOn).HasColumnType("udt_period"); 
    } 
} 

**エラー**

エラーCS0453タイプ '期間'「パラメータとしてTをそれを使用する ために、非null許容値型である必要があります'一般的な型またはメソッド ' StructuralTypeConfiguration.Property(式>) '

エンティティのフレームワークORKユーザー定義テーブル型を作成すると、すべてのヘルプは非常に

答えて

1

あなたはユーザー定義テーブル型としてデータベーステーブルの列を定義することはできません感謝、通常、そのように使用されStartOnEndOn

udt_periodとして使用しますストアドプロシージャのパラメータ。

ユーザー定義データ型をSQLサーバー側からたとえばvarchar(8)と定義することができます。これをソリューションで使用できます。

StartOnの値は、あなたが09/2014形式を使用したい場合は、varchar(7)の代わりvarchar(8)

としてデータ型を作り、 11/2015または Nov 2015または Presentようであるかもしれない 09/2014または Sep 2014EndOnの値としてあるかもしれません

上記の勧告を適用するためには、あなたのコードは次のように変更する必要があります。

public class Degree { 
    public string Institution {get;set;} 
    public string Major {get; set;} 
    public Country Country {get; set;} 
    public string StartOn {get; set;} 
    public string EndOn {get; set;}  
} 

移行シードメソッドを使用している場合は、コードファーストアプローチを使用している場合でも、アプリケーション側からユーザー定義データ型を作成できます。

protected override void Seed(Context context) 
{ 
    // create the type 
    var sql = "if type_id('udt_period') is null create type udt_period from varchar(8) not null"; 
    context.Database.ExecuteSqlCommand(sql); 

    // you can alter the table column type 
    var alter = "alter table Degrees alter column {0} udt_period not null" 
    context.Database.ExecuteSqlCommand(string.Format(alter,"StartOn")); 
    context.Database.ExecuteSqlCommand(string.Format(alter,"EndOn")); 
} 

EntityFrameworkが単一の列に3つのプロパティを持つオブジェクトをマッピングすることはできません、これは何をしようとするあなたに

1

を助けることを願っていますが、可能ではない、あなたは3に3 proprtiesを展開する必要がStartOnEndOn

+0

のデータベースの列はい、ありがとうございます。他の回答には詳細が含まれており、非常に役立ちました。 – Set