Asp.net
實體框架程式碼優先 - 忽略基類
我有一個模型如下:
public class User : System.Web.Security.MembershipUser { public int UserId { get; set; } public string SomeProperty { get; set; } }當我的數據庫生成時,我希望實體框架忽略 MembershipUser 並只生成一個名為 User 的表,其中包含來自 User 類的兩個屬性。我試過以下無濟於事。
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Ignore<System.Web.Security.MembershipUser>(); }
NotMappedAttribute屬性是你的朋友:[MetadataType(typeof(UserMd)] public class User : System.Web.Security.MembershipUser { ////read description bellow code //static User() //{ // var type = typeof(User); // TypeDescriptor.AddProviderTransparent( // new AssociatedMetadataTypeTypeDescriptionProvider(type), type); //} public int UserId { get; set; } public string SomeProperty { get; set; } internal class UserMd { [NotMapped] public string UserName { get; set; } } }我不確定程式碼是否首先自動處理元數據,請嘗試上述方法,如果不起作用,請手動附加元數據(即取消註釋註釋行)。
更新 我確實更喜歡上述解決方案,但如果它對您來說太冗長,請使用以下
StructuralTypeConfiguration<TStructuralType>.Ignore<TProperty> Method方法:protected override void OnModelCreating(DbModelBuilder modelBuilder) { var config = modelBuilder.Entity<User>(); config.Ignore(u => u.UserName); }
您有兩種選擇。一種是通過呼叫
Ignore每個屬性來忽略所有基類屬性。protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<User>().Ignore(u => u.ProviderUserKey); modelBuilder.Entity<User>().Ignore(u => u.LastActivityDate); // and so on for all base class properties }其他選擇是使用組合從您的類中檢索
MembershipUser實例。User這裡的User類不是繼承自MembershipUser.public class User { public int UserId { get; set; } public string SomeProperty { get; set; } public MembershipUser MembershipUser { get { // create an instance using the available properties and return } } }並映射如下
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<User>().Ignore(u => u.MembershipUser); modelBuilder.Ignore<System.Web.Security.MembershipUser>(); }