实体框架与MySql:地图系统.引导到VARCHAR(40)
本文关键字:VARCHAR 系统 框架 MySql 地图 实体 | 更新日期: 2023-09-27 18:05:07
我首先使用实体框架6代码连接到MySql数据库。我不拥有这个数据库。I 不能修改数据库模式。我也不能更改为另一种风格的实体框架(首先是模型或数据库)。
在将POCO对象映射到特定表
时遇到问题表如下:
CREATE TABLE 'my_table' (
'id' VARCHAR(40) NOT NULL,
'name' VARCHAR(200),
Primary Key ('id')
)
我知道'id'列将永远是一个Guid。因此,我创建了POCO类,如下所示:
public class MyTable
{
public Guid Id { get; set;}
public string Name { get; set;}
}
根据我的理解,EF for MySql只会将VARCHAR列映射到POCO中的字符串字段。是否有任何方法我可以告诉实体框架,"id"列应该从VARCHAR(40)转换为Guid?
我正在考虑接受我不能映射到Guid的事实。我只需映射到一个字符串并创建一个自定义getter方法:
public class MyTable
{
public string Id { get; set;}
public string Name { get; set;}
public Guid GetId()
{
Guid id;
if (Guid.TryParse(this.Id, out id))
return id;
else
return new Guid();
}
}
请帮助一个EF新手。由于
我找不到这样做的方法。我希望实体框架会抛出一个异常,如果VARCHAR(40)不能被解析为Guid。MySQL提供程序不是这样的。
我最终将Id成员声明为字符串。为了使我的POCO类成为一个真正的POCO类,我创建了一个助手方法来将字符串转换为guid。
你可能想要使用interface,并使用显式实现。
public interface IMyTable
{
Guid Id { get; set; }
string Name { get; set; }
}
public class MyTable : IMyTable
{
public string Id { get; set; }
public string Name { get; set; }
// use explicit implementation for Id
Guid IMyTable.Id
{
get => Guid.Parse(this.Id);
set => this.Id = value.ToString();
}
}
因此,您可以使用IMyTable来获取具有预期类型的字段的对象,而不是使用MyTable。