Entity Framework 不同类型的列之间的关系
Entity Framework relationship between columns of different types
我有一个现有的数据库,可以说我无法更改。此数据库中的 table 之一具有以下结构:
Table Foo
FooKey UNIQUEIDENTIFIER
ParentFooKey VARCHAR(36)
所以基本上每一行都可以与其父行在同一个 table 中有关系。
我正在尝试使用 EF fluent API 映射此关系,但由于两列之间的类型不同而遇到问题。
我尝试在我的 Foo class 中创建一个 属性,它只是将 ParentFooKey
解析为一个 Guid,但是当我尝试在 Fluent API 中使用它时我收到错误消息,因为 属性 未在 EF 中映射。
或者有没有办法将 ParentFooKey
映射为 EF 中的 Guid? ParentFooKey
列中的值始终是 GUID 或 NULL 的字符串表示形式。
据我所知,你不能。
你必须查询你需要什么,比如:
YourContext.YourDbSet.Where(x=>x.FooKey == parentKey)
您还可以为字符串创建一个扩展方法,将其转换为 GUID,让您的生活更轻松。类似的东西:
public Guid ToGuidOrDefault(this string s){
Guid guid = Guid.Empty;
Guid.TryParse(s, out guid){
return guid;
}
我有一个现有的数据库,可以说我无法更改。此数据库中的 table 之一具有以下结构:
Table Foo
FooKey UNIQUEIDENTIFIER
ParentFooKey VARCHAR(36)
所以基本上每一行都可以与其父行在同一个 table 中有关系。
我正在尝试使用 EF fluent API 映射此关系,但由于两列之间的类型不同而遇到问题。
我尝试在我的 Foo class 中创建一个 属性,它只是将 ParentFooKey
解析为一个 Guid,但是当我尝试在 Fluent API 中使用它时我收到错误消息,因为 属性 未在 EF 中映射。
或者有没有办法将 ParentFooKey
映射为 EF 中的 Guid? ParentFooKey
列中的值始终是 GUID 或 NULL 的字符串表示形式。
据我所知,你不能。 你必须查询你需要什么,比如:
YourContext.YourDbSet.Where(x=>x.FooKey == parentKey)
您还可以为字符串创建一个扩展方法,将其转换为 GUID,让您的生活更轻松。类似的东西:
public Guid ToGuidOrDefault(this string s){
Guid guid = Guid.Empty;
Guid.TryParse(s, out guid){
return guid;
}