Ghi*_*nio 4 .net c# entity-framework-core .net-core
EF 核心 2.2
有这个界面:
public interface INotPersistingProperties
{
string MyNotPersistingPropertyA { get; set; }
string MyNotPersistingPropertyB { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
以及许多实现该接口的实体
public class MyEntity : INotPersistingProperties
{
public int Id { get; set; }
public string MyNotPersistingPropertyA { get; set; }
public string MyNotPersistingPropertyB { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
对于所有实现 INotPersistingProperties 的实体,是否有机会自动忽略这些属性(使用 Fluent API)?
目前 EF Core 不提供定义自定义约定的方法,但您可以将以下内容添加到OnModelCreating
覆盖中(发现所有实体类型后)以迭代实现该接口的所有实体类型并Ignore
为每个属性调用 Fluent API:
var propertyNames = typeof(INotPersistingProperties).GetProperties()
.Select(p => p.Name)
.ToList();
var entityTypes = modelBuilder.Model.GetEntityTypes()
.Where(t => typeof(INotPersistingProperties).IsAssignableFrom(t.ClrType));
foreach (var entityType in entityTypes)
{
var entityTypeBuilder = modelBuilder.Entity(entityType.ClrType);
foreach (var propertyName in propertyNames)
entityTypeBuilder.Ignore(propertyName);
}
Run Code Online (Sandbox Code Playgroud)
您可以将NotMapped
属性放在界面中,然后使用MetadataType 属性
public interface INotPersistingProperties
{
[NotMapped]
string MyNotPersistingPropertyA { get; set; }
[NotMapped]
string MyNotPersistingPropertyB { get; set; }
}
[MetadataType(typeof(INotPersistingProperties))]
public class MyEntity : INotPersistingProperties
{
public int Id { get; set; }
public string MyNotPersistingPropertyA { get; set; }
public string MyNotPersistingPropertyB { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
或者您可以创建一个基类并将属性放在NotMapped
您的属性上
归档时间: |
|
查看次数: |
15239 次 |
最近记录: |