是否有相当于Dapper.Net和Dapper.Net扩展的"NotMapped"?

Ada*_*man 2 dapper micro-orm

我已经开始玩Dapper.Net了,到目前为止我真的非常喜欢它 - 但是,我遇到了一个问题.

假设我有一个POCO类:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string FullName { get { return FirstName + " " + LastName; } }
}
Run Code Online (Sandbox Code Playgroud)

现在,使用Dapper.Net和Dapper.Net扩展,我想通过这样做简单地从DB加载该数据类型的所有实例:

string connectionString = CloudConfigurationManager.GetSetting("DBConnection");
using (SqlConnection cn = new SqlConnection(connectionString))
{
    cn.Open();

    IEnumerable<Types.Person> entities = cn.GetList<Types.Person>();
    var forceMe = entities.ToList();
}
Run Code Online (Sandbox Code Playgroud)

这在Linq设置中运行良好,但是当它使用强制评估的.ToList()命中行时,它会在FullName上以"无效列名"爆炸.考虑到它可能会尊重NotMapped的Entity Framework DataAnnotations内容,我尝试添加NotMapped属性(在向项目添加EF 5之后).这没用.

所以,问题是,如何告诉Dapper.Net数据库中没有预期的列?这是扩展的问题,试图为它在模型POCO中看到的所有内容映射数据库列吗?我是否需要恢复编写SQL,并明确询问我想要的列,或者是否有办法在列上获得等效的NotMapped?

提前致谢.

-亚当

Voi*_*Ray 5

我认为忽略某些属性的唯一方法是实现一个自动类映射器,您可以在其中指定自定义字段映射.例如:

public class CustomMapper : ClassMapper<Foo>
{
    public CustomMapper()
    {
        Table("FooTable");
        Map(f => f.Id).Column("FooId").Key(KeyType.Identity);
        Map(f => f.DateOfBirth).Column("BirthDate");
        Map(f => f.FirstName).Column("First");
        Map(f => f.LastName).Column("Last");
        Map(f => f.FullName).Ignore();
        Map(f => f.Calculated).ReadOnly();
    }
}

public class Foo
{
    public int Id { get; set; }
    public DateTime DateOfBirth { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string FullName
    {
        get { return string.Format("{0} {1}", FirstName, LastName); }
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,将忽略FullName.

如果您的POCO类名称与表名不匹配,则自动映射器还允许您调整表名.

另外,请记住,您必须将自定义地图与POCO类保持在同一个程序集中.该库使用反射来查找自定义地图,它只扫描一个程序集.

希望这有帮助,祝你好运