2017-03-28 7 views
1

"Animal"というクラスのモデルがあります。
「動物」クラスには、いくつかのプロパティを持っていますが、のは、以下の性質に焦点を当ててみましょう:私は実行して動作するようにCREATEDATEを得ることができ、「動物」クラスではODataプロパティ(内部セッター付き) - UpdateDateのように

  1. CREATEDATE
  2. でCreateUser

[DatabaseGenerated(DatabaseGeneratedOption.Computed)] 
public DateTime CreateDate { get; set; } 

これにより、dのデフォルト値を設定することでデータベースにCreateDateを生成することができます。 atabaseを "GetDate()"とします。
外部の呼び出し元がODataサービスのCreateDateフィールドを "設定"しようとすると、渡されるデータは無視されます。
これは、外部の発信者にとっては「読み取り専用」プロパティにします。

ODataサーバーでCreateUser = System.Threading.Thread.CurrentPrincipal.Identity.Nameを設定する必要がある以外は、CreateUserに似た処理を行う必要があります。

プライベートセットを試すと、ODataサービスはプロパティをまったく公開しません。
公開セットを試すと、外部の発信者がプロパティを変更できます。私は、サーバー側でそれを設定するかどうかはわかりません= System.Threading.Thread.CurrentPrincipal.Identity.Name

内部_CreateUserを設定している「動物」コンストラクタで

答えて

1

ここで私は仕事をしています。

public string CreateUser { get; set; } 

[NotMapped] 
public string CreateUserName 
{ 
    get 
    { 
     return CreateUser; 
    } 
    set 
    { 
     CreateUser = CreateUser ?? System.Threading.Thread.CurrentPrincipal.Identity.Name; 
    } 
} 

そしてWebApiConfigに、私は次のように持っていた:私は、次のしているモデルでは

サーバー上で、私は_createUserを設定する必要があるため

builder.EntitySet<Animal>("Animals")); 
builder.EntityType<Animal>().Ignore(p => p.CreateUser); // hide CreateUser 
builder.StructuralTypes.First(t => t.ClrType == typeof(Animal)) 
    .AddProperty(typeof(Animal).GetProperty(nameof(Animal.CreateUserName))); // show CreateUserName 
+0

インターフェイスとコンテキスト保存の変更イベントを使用して、少しクリーンな別の方法が見つかりました。 http://stackoverflow.com/questions/24590911/entity-framework-code-first-datetime-field-update-on-modification – goroth

0

あなたは空のセッターでそれを偽造することができます。公開セットが表示され、ODataエンティティでプロパティが生成されます。最もクリーンなソリューションではありませんが、うまくいくはずです。

public class Animal 
{ 
    private string _createUser; 

    public string CreateUser 
    { 
     get { return _createUser; } 
     set { } 
    } 

    internal SetCreateUser(string user) 
    { 
     _createUser = user; 
    } 
} 
+0

残念ながら、これは仕事をしてデータベース "CreateUser"がnullまたはモデルが初めて作成されたとき。 – goroth

+0

もう一度、最高ではありませんが、内部セッターメソッドを使用して、それを設定する必要のあるアセンブリにInternalsVisibleを与えることができます。 – TGRA

関連する問題