NBear 里主子表设计方案

 

下面是主子表的创建脚本, NBear ,能否实现如下操作:

 

Gateway.Default.Find<State>(State._.ID=”0310”).Citys

Gateway.Default.Find<City>(City._.ID=”0317”).State

 

即通过主表 State 来得到子表集合 , 能否通过子表得到主表对象 ??

 

答案如下:

 

    public interface State : Entity

    {

        [PrimaryKey]

        string ID { get; set; }

        string Name { get; set; }

 

        [FkQuery("Belong", OrderBy = "{ID} ASC", Contained = true, LazyLoad = true)]

        City[] Citys { get; set; }

    }

   

    public interface City : Entity

    {

        [PrimaryKey ]

        string ID {get;set;}

 

        string Name {get;set;}

 

        [FriendKey(typeof(State))]

        [FkReverseQuery(LazyLoad = true )]

        [MappingName("Belong")]

        State Belong {get;set;}

}

 

 

 

if exists(select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_City_Belong_State]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)

ALTER TABLE [dbo].[City] DROP CONSTRAINT FK_City_Belong_State

GO

 

if exists(select * from dbo.sysobjects where id = object_id(N'[dbo].[City]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

drop table [dbo].[City]

GO

 

if exists(select * from dbo.sysobjects where id = object_id(N'[dbo].[State]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

drop table [dbo].[State]

GO

 

CREATE TABLE [dbo].[City](

[ID] varchar(50) NOT NULL,

[Name] varchar(50) NULL,

[Belong] varchar(50) NULL

) ON [PRIMARY]

GO

 

ALTER TABLE [dbo].[City] WITH NOCHECK ADD

CONSTRAINT [PK_City] PRIMARY KEY CLUSTERED

(

[ID]

) ON [PRIMARY]

GO

 

CREATE TABLE [dbo].[State](

[ID] varchar(50) NOT NULL,

[Name] varchar(50) NULL

) ON [PRIMARY]

GO

 

ALTER TABLE [dbo].[State] WITH NOCHECK ADD

CONSTRAINT [PK_State] PRIMARY KEY CLUSTERED

(

[ID]

) ON [PRIMARY]

GO

 

ALTER TABLE [dbo].[City] ADD CONSTRAINT [FK_City_Belong_State] FOREIGN KEY ( [Belong] ) REFERENCES [dbo].[State]( [ID] ) NOT FOR REPLICATION

GO

 

 

 

 

 

insert into dbo.[State]

select '0310', '河北'

 

insert into dbo.[City]

select '0317','沧州','0310'

union

select '0315','衡水','0310'

posted @   NewSea  阅读(281)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示