![](/img/trans.png)
[英]Entity Framework - MySQL - Invalid cast from 'System.String' to 'System.Guid'
[英]Entity Framework with MySql: Map System.Guid to VARCHAR(40)
我首先使用Entity Framework 6代码连接到MySql数据库。 我没有数据库。 我无法更改数据库架构。 我也不能更改为其他形式的Entity Framework(首先是模型或数据库)。
我在将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 newb。 谢谢
我找不到解决办法。 我希望如果VARCHAR(40)无法解析为Guid,则实体框架只会抛出异常。 MySQL提供程序不是这种情况。
我最终将Id成员声明为字符串。 为了使我的POCO类保持真正的POCO类,我创建了一个辅助方法来将字符串转换为Guid。
您可能要为此使用接口并使用显式实现。
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来获取具有期望类型的字段的对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.