我首先使用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新手。感谢
答案 0 :(得分:0)
我找不到办法做到这一点。如果VARCHAR(40)无法解析为Guid,我希望实体框架只会抛出异常。 MySQL提供商的情况并非如此。
我最后将我的Id成员声明为字符串。为了使我的POCO类成为一个真正的POCO类,我创建了一个帮助方法来将字符串转换为Guids。
答案 1 :(得分:0)
您可能希望使用接口并使用显式实现。
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。