0

今天是个好日子。

我在 PostgreSql 中有几个表。

主表

CREATE TABLE main_table
(
  main_table_id serial NOT NULL,
  ... some data fields ...
  table_type integer,      <--- Foreign key
  CONSTRAINT main_table_id PRIMARY KEY (duty_plan_id),
  CONSTRAINT main_table_to_table_type FOREIGN KEY (table_type)
      REFERENCES table_type(table_type) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)

在一些查找表上参考:

CREATE TABLE table_type 
(
  table_type integer NOT NULL,
  value character varying(100)
  CONSTRAINT table_type_id PRIMARY KEY (table_type)
)

并且 C# 类映射到此表:

[Table(Name="main_table")]
    public class MainTable
    {
        [Column(Name="main_table_id", IsPrimaryKey=true,
         IsDbGenerated=true, AutoSync=AutoSync.OnInsert)]
        internal int Id { get; set; }

        .......

        [Column(Name = "table_type")]
        internal int TableTypeId { get; set; }

        private EntityRef<TableType> _TableType;

        [Association(IsForeignKey = true, ThisKey = "TableTypeId ", 
         Storage = "_TableType", Name = "main_table_to_table_type")]
        public TableType TableType{ 
            get { return _TableType.Entity; }
            set { _TableType.Entity = value; TableTypeId = value.Id; } 
        }

    }

[Table(Name="table_type")]
public class TableType
{
    [Column(Name="table_type", IsPrimaryKey=true)]
    public int Id { get; set; }

    [Column(Name = "value")]
    public String Value { get; set; }
}

当我尝试获取所有 MainTable 实体的列表时

(new DataContext(connectionString)).GetTable<MainTable>().MainTables;

从数据库我得到一个错误:

由于对象的当前状态,操作无效

即使我没有调用 TableType 属性,也会出现此错误。但是当我在 TableType 之前评论关联字符串时它就消失了。

我哪里出错了?

我正在使用 .Net 3.5、Mono 2.10 和 PostgreSql 9.2.4

4

1 回答 1

0

于是问题就用下一个方法解决了。我创建了TableTypeId字段public并修改了 TableType 添加了对 MainTable 的引用:

[Table(Name="table_type")]
public class TableType
{
    [Column(Name="table_type", IsPrimaryKey=true)]
    public int Id { get; set; }

    [Column(Name = "value")]
    public String Value { get; set; }

    private EntitySet<MainTable> _MainTable = new EntitySet<MainTable>();
    [Association(OtherKey = "TableTypeId", ThisKey = "Id", 
     Storage = "_MainTable")]
    public ICollection<MainTable> MainTable
    {
        get { return _MainTable; }
        set { _MainTable.Assign(value); }
    }
}

不确定它是否正确,但它对我有用。

于 2013-07-23T11:44:06.900 回答