具有此界面:
import UIKit
import WebKit
import Firebase
import FirebaseDatabase
class AdvisorConnectViewController: UIViewController, UIWebViewDelegate {
@IBOutlet weak var connectView: UIWebView!
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://www.google.com")
connectView.loadRequest(URLRequest(url: NSURL(string:"https://www.google.com")! as URL))
//connectView.load(URLRequest(url: url!))
func webView(webView: UIWebView, shouldStartLoadWithRequest: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
if navigationType == UIWebViewNavigationType.linkClicked {
print("Hey Hey Hey")
}
print("Hey")
return true
}
}
}
和许多实现该接口的实体
public interface INotPersistingProperties
{
string MyNotPersistingPropertyA { get; set; }
string MyNotPersistingPropertyB { get; set; }
}
对于实现INotPersistingProperties的所有实体,是否有机会自动忽略那些属性(使用Fluent API)?
答案 0 :(得分:2)
当前EF Core没有提供定义自定义约定的方法,但是您可以将以下内容添加到OnModelCreating
覆盖中(在发现所有实体类型之后),以迭代实现接口的所有实体类型并调用{{ 1}}每个属性的流利API:
Ignore
答案 1 :(得分:1)
您可以在模型类的此类属性上使用NotMapped
属性。
或者您可以使用如下所示的DBContext类的OnModelCreating
方法中的反射来忽略属性。
foreach(var property in typeof(INotPersistingProperties).GetProperties())
modelBuilder.Types().Configure(m => m.Ignore(property.Name));
答案 2 :(得分:0)
您可以将NotMapped
放在界面的属性中,然后使用MetadataType attribute
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; }
}
或者您可以创建基类并将属性NotMapped
放在属性中
答案 3 :(得分:0)
要忽略EF Core特定接口的所有类,我使用了以下代码:
protected override void OnModelCreating(ModelBuilder builder)
{
var multitenantTypes = typeof(IMultiTenantEntity)
.Assembly
.GetTypes()
.Where(x => typeof(IMultiTenantEntity).IsAssignableFrom(x))
.ToArray();
foreach (var typeToIgnore in multitenantTypes)
{
builder.Ignore(typeToIgnore);
}
}