【问题标题】:Entity framework can't add with singleton实体框架不能用单例添加
【发布时间】:2016-04-20 14:52:59
【问题描述】:

我的人物类:

 public class User
{
    public int Id { get; private set; }

    public string Isim { get; set; }

    public string Soyad { get; set; }

    public User(string isim, string soyad)
    {
        Isim = isim;
        Soyad = soyad;
    }
}

我的 UserBusiness 类:

public sealed class UserBusiness
{
    JuqueryDbEntities entity = new JuqueryDbEntities();

    private static volatile UserBusiness instance;
    private static readonly object syncRoot = new Object();

    private UserBusiness() { }

    public static UserBusiness Instance
    {
        get
        {
            if (instance == null)
            {
                lock (syncRoot)
                {
                    if (instance == null)
                        instance = new UserBusiness();
                }
            }

            return instance;
        }
    }

    public void AddUser(User userToAdd)
    {
        entity.PersonelTable.Add(userToAdd);
        entity.SaveChanges();
    }
}

最后是我的 webform 代码隐藏在单击登录按钮后:

protected void Button1_Click(object sender, EventArgs e)
    {
        string isim = TextBox1.Text;
        string soyad = TextBox2.Text;
        var newUser = new User(isim, soyad);
        UserBusiness.Instance.AddUser(newUser);  
    }

这是我的问题:我的 UserBusiness 类的 AddUser 方法出现错误。 “entity.PersonelTable.Add(newUser);”中的错误线说 'System.Data.Entity.DbSet.Add(SuperQquery.PersonelTable)' 的最佳重载方法匹配有一些无效参数。我在做什么错(顺便说一句,我的 ID 是自动递增的,所以我没有设置任何值。)

【问题讨论】:

  • 看起来AddUser() 方法没有接受用户类型的参数。你检查过参数是什么吗?
  • 我调试了它,'userToAdd' obhect 保存了准确的输入值,所以应该没有问题,但我收到了这个错误@BarryO'Kane
  • userToAdd 不是问题所在。将鼠标悬停在UserBusiness 类的entity.PersonelTable.Add(userToAdd) 行中的Add 上,您应该会看到该方法采用的类型。我怀疑不是User
  • 哇,我现在明白了。 Personel.Add 将 (PersonelTable entity) 作为参数,但我正在发送一个用户对象。那么我该如何解决它。用户对象拥有正确的数据,所以有没有办法转换对象类型或其他东西?有什么建议么? @BarryO'Kane
  • @BatuhanOzdal 请不要忘记检查两个答案

标签: c# asp.net entity-framework oop singleton


【解决方案1】:

您的问题是System.Data.Entity.DbSet 的方法Add 根本不接受用户类型的参数。 就像错误中提到的那样

System.Data.Entity.DbSet.Add(SuperQquery.PersonelTable)' 有一些 无效参数

它接受SuperQquery.PersonelTable类型的对象

所以你需要做的是改变 AddUser 方法

public void AddUser(User userToAdd)
{
   SuperQquery.PersonelTable pt = new SuperQquery.PersonelTable();
   pt.FieldName1 = userToAdd.Isim;
   pt.FieldName2 = userToAdd.Soyad;

   entity.PersonelTable.Add(pt);
   entity.SaveChanges();
}

其中 FieldName 是数据库表中列的名称

编辑:如果这行得通,我们可以说您将用户类型转换为 SuperQquery.PersonelTable 类型,您可以在数据库中插入数据,但这里最好的方法是通过新类 PersonelTable 更改用户类具有相同的逻辑。无需进行转换。

【讨论】:

  • 它有效,我也尝试了你提到的另一种方式,它也有效。我将使用第二种方法,因为您说这是一种更好的方法。谢谢
  • @BatuhanOzdal 您必须勾选单身人士的其他答案才能帮助其他人...它包含您问题的正确答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
相关资源
最近更新 更多