如何创建实体命令,以便生成仅包含指定绑定的 SQL 查询,同时避免空值?

问题描述 投票:0回答:1

我使用 CQRS 模式进行 CRUD 操作,因此在这种情况下我想插入操作,并且我有包含 6 个属性的“CommunicationEntity”。

public class InsertCommunicationCommand
{
    // Include only the properties you want to insert
    public string Property1 { get; set; }
    public string Property2 { get; set; }
    public string Property3 { get; set; }
    public string Property4 { get; set; }
    public string Property5 { get; set; }
    public string Property6 { get; set; }

    // Add any validation logic if needed
    public bool IsValid()
    {
        // Implement your validation logic here
        return true;
    }
}




public class InsertCommunicationCommandHandler
{
    private readonly YourDbContext _dbContext;

    public InsertCommunicationCommandHandler(YourDbContext dbContext)
    {
        _dbContext = dbContext;
    }

    public void Handle(InsertCommunicationCommand command)
    {
        if (!command.IsValid())
        {
            // Handle validation errors
            return;
        }

        // Create a new CommunicationEntity with only the properties you want to insert
        var entity = new CommunicationEntity
        {
            Property1 = command.Property1,
            Property2 = command.Property2
        };

        // Attach the entity to the context and mark it as added
        
        _dbContext.CommunicationEntities.Add(entity);

        // Save changes to the database
        _dbContext.SaveChanges();
    }
}

我想插入一条具有两个属性的记录,但实体为插入操作生成 SQL 查询,其中提及所有属性而不是两个属性 -

INSERT INTO tblCommunication (
    [Property1], 
    [Property2],
    [Property3],
    [Property4],
    [Property5],
    [Property6],
)
VALUES (
    i.[Property1], 
    i.[Property2],
    i.[Property3],
    i.[Property4],
    i.[Property5]
)

但是我想以这样的方式编写实体框架命令,以便在幕后它只会为那些修改如下的值生成 SQL 查询 -

INSERT INTO tblCommunication(
    [Property1], 
    [Property2]
)
VALUES (
    i.[Property1], 
    i.[Property2]
)

那么使用实体框架有没有什么方法可以让我设置值的属性才能插入到.net core中?

c# sql asp.net-core entity-framework-core cqrs
1个回答
0
投票

根据 tblCommunication 的设置方式,您可以向其传递一个 匿名类型,其中仅包含您希望在查询中设置的属性。

_dbContext.CommunicationEntities.Add(new {command.property1, command.property2});

如果属性需要动态,您应该查看ExpandoObject。您只能添加您需要的属性,而忽略其他属性。

请注意,您遗漏的数据库字段需要可为空或具有默认值。

© www.soinside.com 2019 - 2024. All rights reserved.