私有字段上的RequiredAttribute

发布于 2024-12-08 16:23:15 字数 561 浏览 0 评论 0 原文

我有一个具有私有字段 (_linkInString) 的实体,

public class Avatar
{
      [Key]
      public int Id { get; set; }
      [Required]
      private string _linkInString { get; set; }

      [NotMapped]
      public Uri Link
      {
           get { return new Uri(_linkInString); }
           set { _linkInString = value.AbsoluteUri; }
      }

 }

因为 URI 无法作为 Uri 保存在数据库中,只能作为字符串保存。

第一次运行时,我的数据库正在创建仅包含 Id 列的可获取 Avatar。

关于如何解决这个问题有什么想法吗?

编辑 我刚刚发现: - 放弃以下划线作为第一个字母的名称。 - 使用内部给出相同的结果。

I have a entity

public class Avatar
{
      [Key]
      public int Id { get; set; }
      [Required]
      private string _linkInString { get; set; }

      [NotMapped]
      public Uri Link
      {
           get { return new Uri(_linkInString); }
           set { _linkInString = value.AbsoluteUri; }
      }

 }

which has a private field (_linkInString) because URI couldn't be saved in database as Uri, only as string.

When at first run, my database is creating I gettable Avatar with only Id column.

Any ideas on how to get around this?

EDIT
I just found out that:
- names with underscore as first letter are abandoned.
- use of internal gives the same result.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

云柯 2024-12-15 16:23:15

创建一个公共映射字符串字段,该字段返回您想要保存为 URI 字符串表示形式的内容。当然,由于您的公共 URI 并未映射,所以所有工作都按照您的描述进行。

编辑:

请将其更改

[Required]
private string _linkInString { get; set; }

为:

[Required]
public string _linkInString { get; set; }

现在如何保存?

Create a public mapped string field which returns what you want to save as a string representation of your URI. Since your public URI is not mapped all works as you described of course.

Edit:

Please change this:

[Required]
private string _linkInString { get; set; }

Into this:

[Required]
public string _linkInString { get; set; }

How does it save now?

丑疤怪 2024-12-15 16:23:15

EF 中的代码映射有一个很大的限制。它遵循可访问性规则。因此,私有字段对于您的类来说是私有的,并且不会被映射,因为上下文看不到它。

如果您想以这种方式使用 EF,请放弃代码优先/流畅映射并使用 EDMX,其中

There is one very big limitation of code mapping in EF. It follows accessibility rules. So private field is private to your class and it is not mapped because context doesn't see it.

If you want to play with EF this way give up code first / fluent mapping and use EDMX where this is possible.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文