我有幾個屬性,我沒有在數據庫中的直接映射,所以我使用了具有映射到數據庫的另一個變量的約定,以及將用於執行所有操作的公共變量我的實際工作。常見的是[將布爾屬性映射到char列] [1],但我也有一個StatusID屬性,其C#枚舉基於派生類型是不同的。NotMapped屬性保持相關屬性不被保存?
我公共屬性上有[NotMapped]
屬性,我的內部屬性有[Column]
屬性。我認爲有些東西是因爲公共屬性沒有被映射,所以它也保留了其他屬性的映射。
在我的項目,我開始用一種抽象的基本郵件類:
[Table("tblMessage")]
public abstract class Message {
[Column("msgIsSample")]
[Required]
internal string dbIsSample { get; set; }
[Column("msgStatusID")]
internal int? dbStatusId { get; set; }
[NotMapped]
public bool IsSample {
get {
return dbIsSample.ToUpper() == "Y";
}
set {
dbIsSample = value ? "Y" : "N";
}
}
public Message() {
this.IsSample = false;
this.dbStatusId = null;
}
}
現在我只有一個類實現的基類,請求:
public class Request : Message {
[NotMapped]
public int Status {
get {
return this.dbStatusId.HasValue ? this.dbStatusId.Value : 1;
}
set {
this.dbStatusId = value;
}
}
public Request()
: base() {
this.Status = 1;
}
}
這裏是我的上下文:
public class MyContext : DbContext {
public DbSet<Message> Messages { get; set; }
static MyContext() {
Database.SetInitializer<MyContext>(null);
}
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Entity<Message>()
.Map<Request>(m => m.Requires("msgTypeID").HasValue(1));
}
}
這是別人碰到的東西嗎?我還沒有找到任何有關爲什麼這種方式無法正常工作的問題,儘管這看起來像是公認的慣例,直到EF團隊添加了其他自定義映射。其他人必須解決這個問題。
當我嘗試執行此代碼,我得到一個DbUpdateException說,它不能插入NULL插入列「msgIsSample」由於我已經設置在表創建腳本。這沒有任何意義,因爲msgIsSample默認爲「N」。
謝謝!我試圖阻止它們在UI層中可見,並完全忘記了這一要求。我喜歡你的'受保護的內部集合';這將允許它們用於查詢。 – krillgar