使用Linq插入SQL时出现奇怪的错误

时间:2016-03-27 05:12:36

标签: c# linq linq-to-sql

我在使用Linq To SQL插入一行时遇到一个奇怪的问题,我被要求编写一个不使用实体框架的程序,所以我想知道如何制作这个和我&# 39; m遵循Linq to SQL教程。

当我尝试插入一行时,我得到了这个例外:

  

System.Data.SqlServerCe.SqlCeException:No se puede modificar la   columna。 [列名= id]

Linq是否正在尝试修改列?,这是我的实体,当我删除Association字段时,我能够毫无问题地保留。

[Table(Name="Usuario")]
public class Usuario
{
    [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert,Name="id")]
    public int id { get; set; }
    [Column]
    public string nombre { get; set; }
    [Column]
    public string direccion { get; set; }
    [Column]
    public string telefono { get; set; }
    [Column]
    public string codigoPostal { get; set; }

    private EntityRef<Ciudad> _ciudad;

    [Association (Storage="_ciudad",ThisKey="ciudad",OtherKey="id")]
    public Ciudad ciudad {
        get {return this._ciudad.Entity;}
        set { this._ciudad.Entity = value; }
    }

    private EntityRef<TipoUsuario> _tipoUsuario;

    [Association (Storage="_tipoUsuario",ThisKey="tipoUsuario",OtherKey="id")]
    public  TipoUsuario tipoUsuario {
        get {return this._tipoUsuario.Entity;}
        set { this._tipoUsuario.Entity = value; }
    }
}

更新

这是我试图坚持的时候:

public override void agregar(Usuario obj)
{
    System.Data.Linq.Table<Usuario> usrs = context.GetTable<Usuario>();
    usrs.InsertOnSubmit(obj);

    try
    {
       context.SubmitChanges();
    }
    catch (Exception e)
    {
    }
}

这是我的控制者:

public class UsuarioController : Controller
{
    UsuarioRepository dao = new UsuarioRepository();

    ...

    [HttpPost]
    public ActionResult Create(Usuario u)
    {
        //try
        //{
        dao.agregar(u);
        return RedirectToAction("Index");
        //}
        //catch
        //{
        //    return View();
        //}
    }
   ...
}

2 个答案:

答案 0 :(得分:0)

“Id”列都设置为PrimaryKey和DbGenerated。可能在插入“obj”对象之前,您正在修改导致此异常的Id的​​值。

答案 1 :(得分:0)

最后我做了这个工作

问题是我的存储,实际上,它会导致堆栈溢出异常,因为它指向自身。

所以我不得不进行一些更改,将我的FK专栏重命名为&#34; Usuario&#34;表并将此列添加到我的模型中,然后设置&#34; thiskey&#34;和&#34;其他键&#34;值和添加&#34; isforeignkey = true&#34;。

这是我的最终模型&#34; usuario&#34; :

namespace Project.Models
{
    [Table(Name="Usuario")]
    public class Usuario
    {
        [Column(IsPrimaryKey = true, IsDbGenerated = true)]
        public int id { get; set; }
        [Column]
        public string nombre { get; set; }
        [Column]
        public string direccion { get; set; }
        [Column]
        public string telefono { get; set; }
        [Column]
        public string codigoPostal { get; set; }
        [Column]
        public Int32 tipoUsuarioId { get; set; }
        [Column]
        public Int32 ciudadId { get; set; }


        private EntityRef<Ciudad> _ciudad;
        [Association(Storage = "_ciudad", Name = "FK_USUARIO_CIUDAD", OtherKey = "id", ThisKey = "ciudadId", IsForeignKey = true)]
        public Ciudad ciudad {
            get {return this._ciudad.Entity;}
            set { this._ciudad.Entity = value; }
        }

        private EntityRef<TipoUsuario> _tipoUsuario = new EntityRef<TipoUsuario>();
        [Association (Storage="_tipoUsuario",Name="FK_USUARIO_TIPOUSUARIO",OtherKey="id",ThisKey="tipoUsuarioId",IsForeignKey=true)]
        public  TipoUsuario tipoUsuario { 
            get {return this._tipoUsuario.Entity;}
            set { this._tipoUsuario.Entity = value; }
        }

    }

感谢@aminexplo的帮助:)