Mar*_*ark 7 asp.net ef-code-first c#-4.0 entity-framework-4.1
我有一个模型如下:
public class User : System.Web.Security.MembershipUser
{
public int UserId { get; set; }
public string SomeProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
生成数据库时,我希望实体框架忽略MembershipUser,只生成一个名为User的表,其中包含User类中的两个属性.我试过以下无济于事.
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Ignore<System.Web.Security.MembershipUser>();
}
Run Code Online (Sandbox Code Playgroud)
有两种选择.一种是通过调用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
}
Run Code Online (Sandbox Code Playgroud)
其他选项是使用合成来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
}
}
}
Run Code Online (Sandbox Code Playgroud)
并映射如下
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>().Ignore(u => u.MembershipUser);
modelBuilder.Ignore<System.Web.Security.MembershipUser>();
}
Run Code Online (Sandbox Code Playgroud)
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; }
}
}
Run Code Online (Sandbox Code Playgroud)
我不确定代码是否首先自行自动处理元数据,请尝试上述方法,如果不起作用,请手动附加元数据(即取消注释注释行)。
更新
我确实更喜欢上面的解决方案,但如果它对您来说太冗长,请使用以下StructuralTypeConfiguration<TStructuralType>.Ignore<TProperty> Method方法:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
var config = modelBuilder.Entity<User>();
config.Ignore(u => u.UserName);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6221 次 |
| 最近记录: |