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 次 |
最近记录: |