我有一个班级Product
和一个复杂类型AddressDetails
public class Product
{
public Guid Id { get; set; }
public AddressDetails AddressDetails { get; set; }
}
public class AddressDetails
{
public string City { get; set; }
public string Country { get; set; }
// other properties
}
是否可以阻止在AddressDetails
级内Product
映射“国家/地区”属性? (因为我永远不需要Product
类)
像这样的东西
Property(p => p.AddressDetails.Country).Ignore();
答案 0 :(得分:26)
对于EF5及更早版本:
在您的上下文的DbContext.OnModelCreating
覆盖中:
modelBuilder.Entity<Product>().Ignore(p => p.AddressDetails.Country);
对于EF6:你运气不好。请参阅Mrchief's answer。
答案 1 :(得分:15)
不幸的是,接受的答案并不起作用,至少在EF6上是这样,特别是如果子类不是实体。
我还没有通过流畅的API找到任何方法。它的唯一工作方式是通过数据注释:
public class AddressDetails
{
public string City { get; set; }
[NotMapped]
public string Country { get; set; }
// other properties
}
注意:如果您的情况Country
只有当它属于某个其他实体时才被排除,那么您对这种方法感到不快。< / p>
答案 2 :(得分:6)
如果您正在使用EntityTypeConfiguration的实现,则可以使用忽略方法:
public class SubscriptionMap: EntityTypeConfiguration<Subscription>
{
// Primary Key
HasKey(p => p.Id)
Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(p => p.SubscriptionNumber).IsOptional().HasMaxLength(20);
...
...
Ignore(p => p.SubscriberSignature);
ToTable("Subscriptions");
}
答案 3 :(得分:3)
虽然我意识到这是一个老问题,但答案并没有解决我在EF 6中的问题。
对于EF 6,您需要创建一个ComplexTypeConfiguration Mapping。
示例:
public class Workload
{
public int Id { get; set; }
public int ContractId { get; set; }
public WorkloadStatus Status {get; set; }
public Configruation Configuration { get; set; }
}
public class Configuration
{
public int Timeout { get; set; }
public bool SaveResults { get; set; }
public int UnmappedProperty { get; set; }
}
public class WorkloadMap : System.Data.Entity.ModelConfiguration.EntityTypeConfiguration<Workload>
{
public WorkloadMap()
{
ToTable("Workload");
HasKey(x => x.Id);
}
}
// Here This is where we mange the Configuration
public class ConfigurationMap : ComplexTypeConfiguration<Configuration>
{
ConfigurationMap()
{
Property(x => x.TimeOut).HasColumnName("TimeOut");
Ignore(x => x.UnmappedProperty);
}
}
如果你的上下文是手动加载配置,你需要添加新的ComplexMap,如果你使用FromAssembly重载它将被其他配置对象选中。
答案 4 :(得分:2)
在EF6上,您可以配置复杂类型:
modelBuilder.Types<AddressDetails>()
.Configure(c => c.Ignore(p => p.Country))
这样,财产国家将永远被忽略。
答案 5 :(得分:1)
试试这个
modelBuilder.ComplexType<AddressDetails>().Ignore(p => p.Country);
在类似情况下,它对我有用。
答案 6 :(得分:-2)
也可以在Fluent API中完成,只需在映射中添加以下代码
即可this.Ignore(t =&gt; t.Country),在EF6中测试