Skip to content

Commit dd40261

Browse files
committed
#321 Fix reverse navigation properties for One-To-One relationships. Thanks to Stafford Williams.
1 parent e1d56f9 commit dd40261

13 files changed

+1291
-133
lines changed

EntityFramework.Reverse.POCO.Generator/App.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
</entityFramework>
1616
<connectionStrings>
1717
<add name="MyDbContext" providerName="System.Data.SqlClient" connectionString="Data Source=(local);Initial Catalog=northwind;Integrated Security=True;Application Name=EntityFramework Reverse POCO Generator" />
18-
<add name="MyDbContextOneToOne" providerName="System.Data.SqlClient" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=OneToOne;Integrated Security=True;Application Name=EntityFramework Reverse POCO Generator" />
1918
<add name="MyDbContextSqlCE4" providerName="System.Data.SqlServerCe.4.0" connectionString="Data Source=|DataDirectory|NorthwindSqlCe40.sdf" />
19+
<add name="TestDatabase" providerName="System.Data.SqlClient" connectionString="Data Source=(local);Initial Catalog=EfrpgTest;Integrated Security=True;Application Name=EntityFramework Reverse POCO Generator" />
2020
</connectionStrings>
2121
<startup>
2222
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />

EntityFramework.Reverse.POCO.Generator/EF.Reverse.POCO.Core.ttinclude

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2679,12 +2679,13 @@ SELECT SERVERPROPERTY('Edition') AS Edition,
26792679
string.Join(", ", fkCols.Select(x => x.col.NameHumanCase).Distinct().ToArray()),
26802680
foreignKey.IncludeRequiredAttribute ? ", Required" : string.Empty
26812681
);
2682-
2683-
if (relationship == Relationship.OneToOne && foreignKey.IncludeReverseNavigation && fkCol.col.IsPrimaryKey)
2684-
{
2685-
var principalEndAttribute = string.Format("ForeignKey(\"{0}\")", pkTableHumanCaseWithSuffix);
2686-
if (!fkCol.col.DataAnnotations.Contains(principalEndAttribute))
2687-
fkCol.col.DataAnnotations.Add(principalEndAttribute);
2682+
2683+
if (relationship == Relationship.OneToOne && foreignKey.IncludeReverseNavigation && fkCol.col.IsPrimaryKey)
2684+
{
2685+
var principalEndAttribute =
2686+
string.Format("ForeignKey(\"{0}\")", pkTableHumanCaseWithSuffix);
2687+
if (!fkCol.col.DataAnnotations.Contains(principalEndAttribute))
2688+
fkCol.col.DataAnnotations.Add(principalEndAttribute);
26882689
}
26892690
}
26902691

EntityFramework.Reverse.POCO.Generator/EntityFramework.Reverse.POCO.Generator.csproj

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,13 @@
6666
<Reference Include="System.Xml" />
6767
</ItemGroup>
6868
<ItemGroup>
69-
<Compile Include="Database OneToOne.cs">
70-
<DependentUpon>Database OneToOne.tt</DependentUpon>
69+
<Compile Include="TestDatabase_NoDataAnnotation.cs">
70+
<DependentUpon>TestDatabase_NoDataAnnotation.tt</DependentUpon>
71+
<AutoGen>True</AutoGen>
72+
<DesignTime>True</DesignTime>
73+
</Compile>
74+
<Compile Include="TestDatabase_DataAnnotation.cs">
75+
<DependentUpon>TestDatabase_DataAnnotation.tt</DependentUpon>
7176
<AutoGen>True</AutoGen>
7277
<DesignTime>True</DesignTime>
7378
</Compile>
@@ -106,10 +111,14 @@
106111
<Content Include="App_Data\NorthwindSqlCe40.sdf">
107112
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
108113
</Content>
109-
<Content Include="OneToOneDatabase.sql" />
110-
<None Include="Database OneToOne.tt">
114+
<None Include="TestDatabase_NoDataAnnotation.tt">
115+
<Generator>TextTemplatingFileGenerator</Generator>
116+
<LastGenOutput>TestDatabase_NoDataAnnotation.cs</LastGenOutput>
117+
</None>
118+
<Content Include="TestDatabase.sql" />
119+
<None Include="TestDatabase_DataAnnotation.tt">
111120
<Generator>TextTemplatingFileGenerator</Generator>
112-
<LastGenOutput>Database OneToOne.cs</LastGenOutput>
121+
<LastGenOutput>TestDatabase_DataAnnotation.cs</LastGenOutput>
113122
</None>
114123
</ItemGroup>
115124
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

EntityFramework.Reverse.POCO.Generator/OneToOneDatabase.sql

Lines changed: 0 additions & 26 deletions
This file was deleted.
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
-- This database will contain all the horrible edge cases this generator has to cope with
2+
3+
/*CREATE DATABASE [EfrpgTest] ON PRIMARY
4+
( NAME = N'EfrpgTest', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\EfrpgTest.mdf' , SIZE = 5Mb , FILEGROWTH = 1024KB )
5+
LOG ON ( NAME = N'EfrpgTest_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\EfrpgTest.ldf' , SIZE = 1024KB , FILEGROWTH = 10%);
6+
GO
7+
ALTER DATABASE [EfrpgTest] SET COMPATIBILITY_LEVEL = 100
8+
ALTER DATABASE [EfrpgTest] SET ANSI_NULL_DEFAULT OFF
9+
ALTER DATABASE [EfrpgTest] SET ANSI_NULLS OFF
10+
ALTER DATABASE [EfrpgTest] SET ANSI_PADDING OFF
11+
ALTER DATABASE [EfrpgTest] SET ANSI_WARNINGS OFF
12+
ALTER DATABASE [EfrpgTest] SET ARITHABORT OFF
13+
ALTER DATABASE [EfrpgTest] SET AUTO_CLOSE OFF
14+
ALTER DATABASE [EfrpgTest] SET AUTO_CREATE_STATISTICS ON
15+
ALTER DATABASE [EfrpgTest] SET AUTO_SHRINK OFF
16+
ALTER DATABASE [EfrpgTest] SET AUTO_UPDATE_STATISTICS ON
17+
ALTER DATABASE [EfrpgTest] SET CURSOR_CLOSE_ON_COMMIT OFF
18+
ALTER DATABASE [EfrpgTest] SET CURSOR_DEFAULT GLOBAL
19+
ALTER DATABASE [EfrpgTest] SET CONCAT_NULL_YIELDS_NULL OFF
20+
ALTER DATABASE [EfrpgTest] SET NUMERIC_ROUNDABORT OFF
21+
ALTER DATABASE [EfrpgTest] SET QUOTED_IDENTIFIER OFF
22+
ALTER DATABASE [EfrpgTest] SET RECURSIVE_TRIGGERS OFF
23+
ALTER DATABASE [EfrpgTest] SET DISABLE_BROKER
24+
ALTER DATABASE [EfrpgTest] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
25+
ALTER DATABASE [EfrpgTest] SET DATE_CORRELATION_OPTIMIZATION OFF
26+
ALTER DATABASE [EfrpgTest] SET PARAMETERIZATION SIMPLE
27+
ALTER DATABASE [EfrpgTest] SET READ_WRITE
28+
ALTER DATABASE [EfrpgTest] SET RECOVERY SIMPLE
29+
ALTER DATABASE [EfrpgTest] SET MULTI_USER
30+
ALTER DATABASE [EfrpgTest] SET PAGE_VERIFY CHECKSUM
31+
GO
32+
USE [EfrpgTest]
33+
GO
34+
IF NOT EXISTS (SELECT name FROM sys.filegroups WHERE is_default=1 AND name = N'PRIMARY')
35+
ALTER DATABASE [EfrpgTest] MODIFY FILEGROUP [PRIMARY] DEFAULT
36+
GO
37+
*/
38+
39+
USE [EfrpgTest]
40+
GO
41+
42+
43+
44+
45+
-- #321 Fix reverse navigation properties for One-To-One relationships
46+
CREATE SCHEMA Stafford
47+
GO
48+
CREATE TABLE Stafford.Boo
49+
(
50+
id INT IDENTITY(1, 1) NOT NULL,
51+
[name] NCHAR(10) NOT NULL,
52+
CONSTRAINT PK_Boo PRIMARY KEY CLUSTERED (id ASC)
53+
);
54+
CREATE TABLE Stafford.Foo
55+
(
56+
id INT NOT NULL,
57+
[name] NCHAR(10) NOT NULL,
58+
CONSTRAINT PK_Foo PRIMARY KEY CLUSTERED (id ASC)
59+
);
60+
GO
61+
ALTER TABLE Stafford.Foo WITH CHECK ADD CONSTRAINT FK_Foo_Boo FOREIGN KEY(id) REFERENCES Stafford.Boo (id);
62+
GO
63+
ALTER TABLE Stafford.Foo CHECK CONSTRAINT FK_Foo_Boo;
64+
GO
65+
66+

0 commit comments

Comments
 (0)