在LINQ许多一对多映射实体

我有SQL Server表如下:

create table TableA ( id int primary key identity, name varchar(16) not null ) create table TableB ( id int primary key identity, data varchar(max) not null ) create table TableAtoB ( tablea_id int not null foreign key references TableA(id), tableb_id int not null foreign key references TableB(id), primary key nonclustered (tablea_id, tableb_id) ) create unique index idxID on TableAtoB(tableb_id, tablea_id)

和映射在C#中,如下所示:

[Table] public class TableA { [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)] public int ID { get; set; } [Column] public string name { get; set; } } [Table] public class TableB { [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)] public int ID { get; set; } [Column] public string data { get; set; } } [Table] public class TableAtoB { [Column] public int tablea_id { get; set; } internal EntityRef<TableA> _tablea; [Association(IsForeignKey = true, OtherKey = "ID", ThisKey = "tablea_id", Storage = "_tablea")] public TableA tablea { get { return _tablea.Entity; } internal set { _tablea.Entity = value; } } [Column] public int tableb_id { get; set; } internal EntityRef<TableB> _tableb; [Association(IsForeignKey = true, OtherKey = "ID", ThisKey = "tableb_id", Storage = "_tableb")] public TableB tableb { get { return _tableb.Entity; } internal set { _tableb.Entity = value; } } }

不过,我得到System.InvalidOperationException:无效的关联映射为成员的TableAtoB.tablea“。 “TableAtoB'不是一个实体,是我的实体映射不正确?

我不能改变表模式。

--------------解决方案-------------

你需要有ColumnAttribute.IsPrimaryKey属性:

[Column(IsPrimaryKey = true)]
public int tablea_id { get; set; }
...
[Column(IsPrimaryKey = true)]
public int tableb_id { get; set; }

你可能想尝试的自动生成使用设计的表,看看是什么产生。 有对的EntityRef的,你似乎缺少一些额外的构造函数和事件侦听器。 而且,看来,无论是你的最终表具有典型参考多对多表,你将在设计师找到。

此外,您可能想看看在PLINQO http://www.codesmithtools.com/plinqo因为他们能够实现隐藏中间(TableAtoB)表的代码生成的方法,并给出一个更加面向对象的代码执行吐类似于EF如何处理多对多的关系。

分类:LINQ 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.917 (s). 10 q(s)