我正在使用Dapper.net Extensions,并且想要忽略某些属性而无需编写完整的自定义映射器.正如您在下面的ClassMapper中看到的那样,当我真正想做的就是忽略一个属性时,会有很多冗余代码.实现这一目标的最佳方法是什么?
我喜欢这里提供的答案/sf/answers/1025454951/但我找不到定义'Write'的命名空间.
public class Photo : CRUD, EntityElement
{
public Int32 PhotoId { get; set; }
public Guid ObjectKey { get; set; }
public Int16 Width { get; set; }
public Int16 Height { get; set; }
public EntityObjectStatus ObjectStatus { get; set; }
public PhotoObjectType PhotoType { get; set; }
public PhotoFormat2 ImageFormat { get; set; }
public Int32 CategoryId { get; set; }
public int SomePropertyIDontCareAbout { get; set; }
}
public class CustomMapper : …
Run Code Online (Sandbox Code Playgroud) 我知道我可以使用纯粹的 dapper 来构建我的更新字符串,其中只有我想要更新的属性(白名单)。
我想要的是保持 dapper 扩展的 ORM 风格:
con.Update<Person>(person);
Run Code Online (Sandbox Code Playgroud)
我希望人的某些属性不被更新(黑名单)
如何排除运行 .Update 扩展方法更新的属性?
你可能知道一个更好的 .Update 扩展名的 dapper 风格吗?(那我就不用
写下来 ;-)
我正在使用Dapper Extensions在数据库上执行一些简单的CRUD操作.我的问题是我使用的表以不同的模式保存到dbo.有没有办法在dapper扩展级别选择架构?
要么
是否应该通过用于连接数据库的用户处理?
如果一次插入一个对象,则可以从该对象中获取 Id:
foreach (var object in objectList)
{
conn.Insert(object);
int id = object.Id; // Returns Id as expected
}
Run Code Online (Sandbox Code Playgroud)
但是,如果插入 IEnumerable 对象,则无法正确获取 Id:
conn.Insert(objectList);
foreach (var object in objectList)
{
int id = object.Id; // Returning 0
}
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以插入对象列表并仍然获取 Id,而无需一次插入 1 个?
有人知道with (nolock)
在使用时是否可以告诉dapper追加connection.GetList<TView>()
?
我使用它作为我的CQRS模型中的R并且它运行良好但我现在担心我们正在做更多的重读,它将开始锁定表.如果可能的话,我宁愿不在混合中添加交易.
我正在使用 Dapper Extensions,但我的数据库中有多个架构名称。
我在下面的链接中找到了答案,但它假设我只有一个架构名称,而这不是我的情况。 Dapper 扩展更改架构
在运行时更改架构名称的正确方法是什么?
我是 Dapper 的新手。让我解释一下我想要实现的目标。我有一个简单的查询,它从数据库返回列,我不想为其创建实体(属性)类来填充数据。我想为此使用动态类型。下面是我的代码:
public dynamic GetABC(int year)
{
using (var db = new MySql.Data.MySqlClient.MySqlConnection(ClsConnectionString.connectionString))
{
string query = string.Format(@"SELECT * FROM ranking where YEAR(eventdate)='{0}') ORDER BY eventdate DESC, eventid ASC",year);
//return db.Query<RankingEntity>(query, commandType: System.Data.CommandType.Text).AsList();
var a = (IEnumerable<dynamic>)db.Query(query, null, null, true, null, CommandType.Text).ToList();
return a;
}
}
Run Code Online (Sandbox Code Playgroud)
有什么办法吗,我只是编写一种常用方法来获取 List 作为“Property”=“Value”,就像我们使用任何实体类时通常得到的那样。
我不确定它是否可以实现,但我希望了解是否可能并希望在我们的应用程序中实现。
我可以通过我不想要的 dapperrows 实现循环来实现这一点。因为如果有 10000 行,循环将迭代 10000 次。
提前致谢。
我有一个问题是 Dapper Query 在父对象上分割,而不是在子对象上分割。结果为每个子项返回一个父行,从而给出许多重复的父项,其中只有 1 个子项。
我正在探索的一个可能的问题是,table1 和 table2 的主键是否会在 split 函数中造成一些混乱,因为它们具有相同的名称 (.Id)。
问题是,如何拆分父子行,以便可以使用 SplitOn: 中的相同参数将许多子项绑定到一个父模型?
=================================================== =======================
结论
在评论中我们得出的结论是字典需要在函数之外,不需要多个SplitOn:,一个就足够了。
最后,字典确实提供了表 1 的不同集合,每个表都代表孩子。
请参阅评论了解更多详情。
=================================================== =======================
var sql = $@"
SELECT * FROM Table1 t
INNER JOIN Table2 c ON c.Table1_Id = t.Id;";
var result = connection.Query<Table1, Table2, Table1>(
sql,
(table1, table2) =>
{
Table1 table1Entry;
Dictionary<int?, Table1> table1Dictionary = new Dictionary<int?, Table1>();
if (!table1Dictionary.TryGetValue(table1.Id, out tableEntry))
{
table1Entry = table1;
table1Entry.table2s = new List<Table2>();
tableDictionary.Add(table1Entry.Id, table1Entry);
}
tableEntry.table2s.Add(table2);
return …
Run Code Online (Sandbox Code Playgroud) 我必须调用参数为char
和 的存储过程VarBinary(MAX)
。我需要使用 Dapper 从 C# 代码调用此存储过程。但我找不到 dapper 支持的任何参数。
SP:
ALTER PROCEDURE [dbo].[uspTest]
, @Param1 CHAR(1)
, @Param2 VARBINARY(MAX)=null
Run Code Online (Sandbox Code Playgroud)
C#:
DynamicParameters parameter = new DynamicParameters();
parameter.Add("@Param1", email.SenderType, DbType.char, ParameterDirection.Input);
parameter.Add("@Param2", email.AttachedFileStream, DbType.varbinary, ParameterDirection.Input);
Run Code Online (Sandbox Code Playgroud)
编译错误:
DBType 不包含 char 和 varbinary 的定义
我正在使用SQLite,Dapper和DapperExtensions,这些都是最新的NuGet.
这是我的表的架构......
CREATE TABLE `LibraryInfo` (
`Id` INTEGER NOT NULL,
`Name` TEXT NOT NULL CHECK(length ( Name ) > 0),
`Description` TEXT,
`Version` TEXT NOT NULL CHECK(length ( Version ) > 0),
PRIMARY KEY(Id)
);
Run Code Online (Sandbox Code Playgroud)
在其中我有一行包含以下数据
Id ="0"
Name ="Test Library"
Description ="这是测试库"
Version ="1.2.3.4"
这是我桌上的POCO ......
public class LibraryInfo
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Version { get; set; }
} …
Run Code Online (Sandbox Code Playgroud)