2010-05-12 16 views
1

我有一对夫妇的LINQ到SQL实体这是造成我的问题:LINQ到SQL System.InvalidOperationException:会员自动同步失败

[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)作为标识 - 它又被用作Entity2字段上的PK。

任何人都可以指出我在正确的方向得到这个错误排序?

回答

0

通过改变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; } 

} 

并与NEWID的默认值增加 '的Guid' 列于表ENTITY1()

0

什么是在Bssid字段上生成GUID,它听起来像这是由数据库中newid()的默认值设置的。 Link2SQL抱怨说,在插入数据库后,它会被数据库设置,所以它无法同步它,因为它不知道它已经设置了什么值。即没有等同的或类似的身份。