Simple.Data - 主键映射

时间:2014-12-09 21:18:57

标签: simple.data

我正在使用Simple.Data,我对此有疑问。

我有以下课程:

public abstract class User
{
    public int Id { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public string Salt { get; set; }
}

public class Customer : User
{
    public string Email { get; set; }
}

public class Admin : User
{
    public string Name { get; set; }
    public bool IsActive{ get; set; }
}

一个在数据库中执行操作的类:

public class Manager
{
    public string ConString { get; set; }

    public Manager()
    {
        ConString = ConfigurationManager.ConnectionStrings["Test"].ConnectionString;
    }


    public void CustomerUpdate()
    {       
        var obj = new Customer()
        {
            Id = 1,
            Username = "teste",
            Password = "teste",
            Salt = "",
            Email = "teste@teste.com"
        };

        var db = Database.OpenConnection(conString);
        db.tbCustomer.Update(obj);
    }
    public void AdminUpdate()
    {           
        var obj = new Admin()
        {
            Id = 1,
            Username = "teste",
            Password = "teste",
            Salt = "",
            Name = "teste",
            IsActive = true             
        };

        var db = Database.OpenConnection(conString);
        db.tbAdmin.Update(obj);
    }
}

但是,我有一个问题:

在我的数据库中,在表tbCustomer中,主键是“CustomerId”列。表tbAdmin的主键是“AdminId”列。 由于User类有一个名为“Id”的属性,我无法进行更新。

当你在tbCustomer表上提供更新时,我有什么方法可以映射,系统采用“Id”属性并输入“CustomerId”列吗? 对于tbAdmin也是如此。我希望他拿“Id”并放在“AdminId”中。

1 个答案:

答案 0 :(得分:1)

如果您无法在类中重命名该属性,则最佳选项最有可能在更新中使用Named Parameters而不是传递对象。你的一个例子是

db.tbCustomer.UpdateById(Id: 1, 
                         Username: "teste",
                         ...);