Linq到sql,继承重复列
各位。我对linq to sql有一个问题 我正在使用System.Data.Linq.Mapping中的属性映射我的类和表。 我注意到,有些列定义在我的代码中是重复的(比如ID)。所以我想把这些定义转移到基类。我写过这样的东西:Linq到sql,继承重复列,linq,linq-to-sql,inheritance,mapping,Linq,Linq To Sql,Inheritance,Mapping,各位。我对linq to sql有一个问题 我正在使用System.Data.Linq.Mapping中的属性映射我的类和表。 我注意到,有些列定义在我的代码中是重复的(比如ID)。所以我想把这些定义转移到基类。我写过这样的东西: public abstract class BasicEntity { [Column(IsDbGenerated=true, IsPrimaryKey=true)] public int ID { get; set; } } [Table(Name
public abstract class BasicEntity
{
[Column(IsDbGenerated=true, IsPrimaryKey=true)]
public int ID { get; set; }
}
[Table(Name = "Users")]
public class User : BasicEntity
{
[Column(Name = "Name")]
public string Name { get; set; }
}
public class TestDataContext : DataContext
{
public TestDataContext(string connectionString) : base (connectionString) { }
public Table<User> Users { get { return this.GetTable<User>(); } }
}
因此,当我尝试创建数据库时,我得到了一个System.Data.SqlClient.SqlException,它说:“名为“ID”的列在目标表或视图中不存在。”
很明显,这个例外是由我的基本素质造成的
最后,我的问题是:有没有一种方法可以继承列定义来删除重复的代码
明确地说,我使用的是#develope,它没有像VS
非常感谢。在LINQ to SQL中,基类和派生类属性必须存在于同一个表中。在您的情况下,我怀疑公共字段存在于多个表中。LINQ到SQL不支持这种映射。您可能需要将EF用于这种继承映射。我遇到了类似的情况,因为我使用的数据库包含8个不同的表,其中包含一个主键和8个外键约束 所有8个表共享完全相同的列名和外键约束,只有它们的数据字段和主键字段具有不同的列名/类型等 我想创建一个带有实体的SQL Linq DataContext,但我不想在每种类型上定义相同的8列。所以我把它们放在基类型XYZDataEntryEntity中 我遇到了这个错误,所以我有了一个想法,我把基类中的所有列都虚拟化了。我在基类中用列属性标记它们,并在驱动类中简单地重写它们,如
public override int InstitutionID
{
get
{
return base.InstitutionID;
}
set
{
base.InstitutionID = value;
}
}
然后我收到投诉,因为私人领域不可用,例如
[Column(Storage=“\u XYZStatus”,DbType=“Int NOT NULL=”,Name=“Column\u Name\u here”)]
_XYZStatus不可用,我想,是的,因为它在基类中
因此,我将_XYZStatus设置为受保护而非私有,以便被驱动的类可以看到它,就像变魔术一样。一切顺利
当然,我必须在每个类中重写相同的8个属性才能工作,但我只需要在基类中对它们进行更改,它至少会将它们都绑定到相同的基类和相同的8个属性。有多少实体具有“相同”名称属性?我之所以问这个问题,是因为除非这个数字非常大,否则你所介绍的复杂性是不值得的。一个特定的项目中没有那么多实体,尽管这样的机制会节省我很多时间,因为我在未来的许多项目中都会遇到这个问题。亲爱的Jim,谢谢你的回复,我会考虑将来使用EF。
public override int InstitutionID
{
get
{
return base.InstitutionID;
}
set
{
base.InstitutionID = value;
}
}