LINQ to SQL вставить индекс первичного ключа - PullRequest
1 голос
/ 13 апреля 2011
[Column(Name = "id", IsPrimaryKey = true, CanBeNull = false)] 
public string id { get; set; }

Ошибка:

Невозможно вставить значение Null в идентификатор столбца, столбец не допускает пустых значений

Если я установил его в столбце идентификаторов и сделалнесколько изменений в моем [Column attributes] В результате я вижу, что вставка IDENTITY не включена, что мне делать?Нужно ли, чтобы мой столбец первичного ключа также был идентификатором?

Это просто простая таблица с шагом +1 к первичному ключу

public partial class linqtest : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            MyContext db = new MyContext("Server=(local);Database=Test;User ID=admin;Password=pw");
            Child c = new Child();
            c.name = "joe "+DateTime.Now;
            db.parents.InsertOnSubmit(c);
            db.SubmitChanges();
        }
    }

    public class MyContext : DataContext
    {
        public static DataContext db;
        public MyContext(string connection) : base(connection) { }
        public Table<Parent> parents;
    }

    [Table(Name="parents")]
    [InheritanceMapping(Code = "retarded", Type = typeof(Child), IsDefault=true)]
    public class Parent
    {
        [Column(Name = "id", IsPrimaryKey = true, CanBeNull = false, DbType = "Int NOT NULL IDENTITY", IsDbGenerated = true)] /* I want this to be inherited by subclasses */
        public int id { get; set; }

        [Column(Name = "name", IsDiscriminator = true)] /* I want this to be inherited by subclasses */
        public string name { get; set; }
    }

    public class Child : Parent
    {

    }

1 Ответ

0 голосов
/ 13 апреля 2011

Если я просто определю свой столбец ID как IsPrimaryKey = true и IsDbGenerated = true, все будет отлично работать:

[ColumnAttribute(Storage="_ID", AutoSync=AutoSync.OnInsert, 
 DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
public int ID
{....}

Затем в коде - когда я создаю новую сущность, я просто присваиваю ей произвольную ID - я обычно использую отрицательные числа:

MyEntity entity = new MyEntity { ID = -55 };

MyContext.MyEntities.InsertOnSubmit(entity);
MyContext.CommitChanges();

После вызова .CommitChanges() новые сущности сохраняются в таблице базы данных, а фактические, действительные значения ID (INT IDENTITY) устанавливаются и отражаются на моем объекте entity - т.е. после позвони, я верну реальное ID, которое база данных дала моей новой сущности.

Итак, мой вопрос: где ваша проблема? Вроде работает просто отлично ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...