1

DateオブジェクトをラップしDateTimeて Date 部分のみを公開するカスタムクラスがあります。

エンティティに含めようとしていますが、例外が発生します:

error 3004: Problem in mapping fragments starting at line 6:No
mapping specified for properties Goal.Date in Set Goal.\r\nAn Entity with Key
(PK) will not round-trip when:\r\n  Entity is type [EFCodeFirstSandbox.Goal]

何を与える?カスタム クラスを EF の世界でうまく機能させるにはどうすればよいですか?

以下は、カスタムDateクラスの単純化されたバージョンです。

public class Date
{
    private DateTime value;
    public Date(DateTime date)
    {
        this.value = date.Date;
    }
    public static implicit operator Date(DateTime date)
    {
        return new Date(date);
    }
    public static implicit operator DateTime(Date date)
    {
        return date.value;
    }
}

を使用するエンティティ クラスDate:

public class Goal
{
    [Key]
    public Guid Id { get; set; }
    public Date Date { get; set; }
    public int Amount { get; set; }
}

編集: このDateクラスは、説明目的でのみ使用されます。SQL で日付を表す方法ではなく、POCO 以外のカスタム クラスをマップする方法に興味があります。:)

4

4 に答える 4

1

私はあなたがあなたが望んでいることをすることができるとは思わない. タイプを使用する必要があります。エンティティ フレームワークはマッピング方法を知っています。必要なことは、DateTime を使用し、読み取り専用またはマップされていないプロパティを使用してカスタム型を公開することです。

public class Goal
{
    [Key]
    public Guid Id { get; set; }
    public DateTime Date { get; set; }
    public int Amount { get; set; }

    // Read only field not mapped
    public Date CustomDate { get { return this.Date; }}

    // OR... specificallly ignored property that enables date setting

    [NotMapped] // In System.ComponentModel.DataAnnotations.Schema namespace
    public Date CustomDate { 
                                get { 
                                     return this.Date; 
                                }
                                set {
                                    this.Date = value;
                                }
                           }        
}
于 2013-09-30T16:12:55.770 に答える
1

実際、EF は次のように述べていDateます。プロパティは別のクラスへの参照であるためDate、EF はこのクラスのマッピングとの間の関連付けを定義する必要があります。どちらもそうではありません。GoalDate

完全なプロパティをデータベース列にマップし、DateTimeこのプロパティの日付部分を返す計算プロパティを作成しDateTimeます。

たとえば(@Excommunicatedが指摘したように):

partial class Goal
{
    [System.ComponentModel.DataAnnotations.Schema.NotMapped]
    public DateTime DateTrunc
    { 
        get { return this.Date.Date; }
    }        
}
于 2013-09-30T15:10:04.183 に答える
0

表示されるエラーは、EF がDate型をテーブルに解決しようとし (作成する他のクラスと同様)、 type の主キーがないことを意味しますDate
でプロパティを使用DateTimeおよび装飾する必要があります[DataType(DataType.Date)]

于 2013-09-30T15:16:39.447 に答える