Linq to SQL System.InvalidOperationException: ошибка автосинхронизации члена - PullRequest
1 голос
/ 12 мая 2010

У меня есть пара сущностей Linq to SQL, которые вызывают у меня проблемы:

[Table(Name = "ViewName")]
[InheritanceMapping(Code = false, Type = typeof(Entity1), IsDefault = true)]
[InheritanceMapping(Code = true, Type = typeof(Entity2))]
public class Entity1
{
[Column(AutoSync = AutoSync.OnInsert, DbType = "uniqueidentifier NOT NULL", IsPrimaryKey = true, IsDbGenerated = true)]
    public Guid Bssid { get; set; }
    // other properties
[Column(AutoSync= AutoSync.OnInsert ,DbType = "Int NOT NULL IDENTITY", IsDbGenerated = true)]
    public int NewSslid { get; set; } 

}

public class Entity2 : Entity1
{
    public Entity2()
    {
        Discriminator = true;
        _options  = new EntitySet<Entity3>();
    }
}

Сущности используют обновляемое представление, а не базу данныхтаблица, поскольку есть около 150 полей, распределенных по двум таблицам.Представление выполняется со всеми функциями CRUD, работающими так, как они должны, но я получаю следующую ошибку при попытке вставить любой тип сущности в базу данных:

System.InvalidOperationException: Ошибка члена AutoSync.Чтобы элементы автоматически синхронизировались после вставки, тип должен иметь автоматически созданный идентификатор или ключ, который не изменяется базой данных после вставки.

В таблице БД для Entity1 используетсяPK и отдельное поле (NewSslid) в качестве идентификатора - который, в свою очередь, используется в качестве PK в поле Entity2.

Может ли кто-нибудь указать мне правильное направление для сортировки этой ошибки?

Ответы [ 2 ]

0 голосов
/ 13 мая 2010

Изменяя Entity1:

public class Entity1
{
    public Entity1()
    {
        Guid = System.Guid.NewGuid();
    }

    [Column(IsDbGenerated = true)]
    public Guid Bssid { get; set; }
    [Column(IsPrimaryKey = true, IsDbGenerated = false, Name = "Guid")]
    public Guid? Guid { get; set; }
    // other properties
    [Column(AutoSync = AutoSync.OnInsert , DbType = "Int NOT NULL IDENTITY", IsDbGenerated = true)]
    public int NewSslid { get; set; }

 }

И добавление столбца «Guid» в таблицу Entity1 со значением по умолчанию newid ()

0 голосов
/ 12 мая 2010

Что генерирует GUID для поля Bssid, похоже, что это устанавливается значением по умолчанию newid () в базе данных. Link2SQL жалуется, что это устанавливается БД после вставки, поэтому он не может синхронизировать ее, потому что не знает, какое значение было установлено. т. е. не существует эквивалента @@ идентичности или подобного.

...