簡體   English   中英

阻止EF 5生成屬性

[英]Prevent EF 5 from generating a property

我首先使用帶有部分類的EF5數據庫。 我的部分類中有一個屬性,其中包含n個對象,該對象作為列存儲在包含XML數據的數據庫中。 當EF嘗試使用自定義getter / setter對其進行讀寫時,我想處理該對象的序列化/反序列化。

是否可以在我的局部類中公開該列並使用EF映射它,而無需為其自動生成屬性?

即:

public SomeObject BigComplexObject { get; set; } // forms etc in my app use this
public string BigComplexObjectString // when the EF tries to read/write the column, my custom getter/setter kicks in
{
    get { return this.BigComplexObject.ToXmlString(); }
    set { this.BigComplexObject  = new BigComplexObject(value); }
}

目前,EF正在自動為該列生成一個成員,因此我只剩下兩個。

嘗試更改邏輯。 保留EF生成的屬性,該屬性將用數據庫中的XML字符串填充:

public string BigComplexObjectString { get; set; }

然后執行以下操作:

[NotMapped]
public SomeObject BigComplexObject
{
    get { return new SomeObject(this.BigComplexObjectString); }
    set { this.BigComplexObjectString = value.ToXmlString(); }
}

不要忘記添加[NotMapped]來指示EF忽略此屬性。

好吧,我們在一個非常類似的情況下使用了一些技巧。

我們使用...屬性的屬性面板(在edmx文件中),並在“文檔”(摘要或詳細描述)行中添加一些內容(可能不是最好的地方,但是無論如何)。 可以通過您的T4文件進行訪問。

因此,您可以在屬性面板中編寫類似“ useXml”的內容,然后在修改tt時生成所需的代碼(例如在.tt文件中獲取信息)

if (edmProperty.Documentation != null && edmProperty.Documentation.Summary = "useXml")
  //generate something special

在edmx中擁有一個更好的“ cusom infos”位置會很棒,但是我們暫時沒有發現更好的地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM