Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq到sql,继承重复列_Linq_Linq To Sql_Inheritance_Mapping - Fatal编程技术网

Linq到sql,继承重复列

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

各位。我对linq to sql有一个问题

我正在使用System.Data.Linq.Mapping中的属性映射我的类和表。 我注意到,有些列定义在我的代码中是重复的(比如ID)。所以我想把这些定义转移到基类。我写过这样的东西:

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;
        }
    }