gpt4 book ai didi

dapper - Dapper.Net 和 Dapper.Net 扩展是否有等同于 "NotMapped"的东西?

转载 作者:行者123 更新时间:2023-12-02 05:29:43 32 4
gpt4 key购买 nike

我已经开始玩 Dapper.Net,到目前为止我真的很喜欢它 - 然而,我遇到了一个问题。

假设我有一个 POCO 类:

public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName { get { return FirstName + " " + LastName; } }
}

现在,使用 Dapper.Net 和 Dapper.Net 扩展,我想通过执行以下操作从数据库中简单地加载该数据类型的所有实例:

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();
}

这在 Linq 设置中运行良好,但当它遇到强制计算的 .ToList() 行时,它会在 FullName 上出现“无效的列名”。认为它可能尊重 NotMapped 的 Entity Framework DataAnnotations 内容,我尝试添加 NotMapped 属性(在将 EF 5 添加到项目之后)。这没有用。

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

最佳答案

我认为忽略某些属性映射的唯一方法是实现 auto class mapper ,您可以在其中指定自定义字段映射。例如:

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); }
}
}

在上面的例子中,FullName 被忽略了。

自动映射器还允许您调整表名,以防您的 POCO 类名与表名不匹配。

此外,请记住,您必须将自定义 map 保存在与 POCO 类相同的程序集中。该库使用反射来查找自定义映射,并且它只扫描一个程序集。

希望对您有所帮助,祝你好运

关于dapper - Dapper.Net 和 Dapper.Net 扩展是否有等同于 "NotMapped"的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12576225/

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