我有几个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)作为标识 - 而后者又用作Entity2字段上的PK。
有人能指出我正确的方向来排除这个错误吗?
答案 0 :(得分:0)
什么是在Bssid字段上生成GUID,听起来这是由数据库中newid()的defaultvalue设置的。 Link2SQL抱怨说这是在插入后由DB设置的,所以它不能同步它,因为它不知道它被设置为什么值。即没有@@ identity或类似的等同物。
答案 1 :(得分: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; }
}
将'Guid'列添加到Entity1表中,默认值为newid()