gpt4 book ai didi

c# - Fluent Configuration,忽略基于修饰属性的属性

转载 作者:太空宇宙 更新时间:2023-11-03 10:48:56 26 4
gpt4 key购买 nike

我需要忽略基于属性的属性。

您将在下面看到一些代码(我的项目的一小段摘录),您将了解我正在努力完成的工作。

我正在努力解决的问题是将此规则添加到我的 bhibernate 配置中,即,如果属性具有 [IgnoreProperty] 属性,flientnhibernate 不应将其包含在正在生成的模式中。

我希望它尽可能通用,这样我就不必为每个实体创建类映射。

有没有办法将这种功能直接包含到配置中?如果是这样,我真的很感激一个例子

public class Person
{
public virtual string Name { get; set; }
public virtual string Surname { get; set; }

[IgnoreProperty]
public string FullName
{
get { return string.Format("{0} {1}", this.Name, this.Surname); }
}
}

public class IgnorePropertyAttribute : Attribute
{
}

public class SessionManager
{
private static ISessionFactory GetFactory()
{
return
Fluently.Configure()
.Database(SQLiteConfiguration.Standard.UsingFile(Path.Combine(@"C:\temp","MyDatabaseName.db")))
.Mappings(
m =>
m.AutoMappings.Add(AutoMap.AssemblyOf<Person>(t => t.Namespace.StartsWith(typeof(Person).Namespace))))
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();
}
}

最佳答案

查看此 page获取更多信息。

您可以使用谓词忽略属性

.OverrideAll(map =>  
{
map.IgnoreProperties(x => x.Name.Contains("Something"));
});

只需修改谓词以使用反射来查明是否定义了属性。

更新:这可以在 ClassMap 中使用。为了在全局范围内应用约定,请应用实现 IPropertyConventionAcceptance 接口(interface)的约定(请参阅 thisthis ):

public MyConvetion : IPropertyConventionAcceptance 
{
public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
{
criteria.Expect(x => boolValue); // [is there a IgnoreAttribute]);
}
}

This页面详细介绍了约定以及如何在全局范围内应用它们。

关于c# - Fluent Configuration,忽略基于修饰属性的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22248346/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com