2011-08-24 73 views
1

据我所知,要保存在数据库中的属性不能是只读。 IIdentity属性:AuthenticationType,IsAuthenticated和Name都是只读的。实体框架和IPrincipal/IIdentity的实现

是使包装的属性,需要保存唯一的解决方案或有更好的?

编辑: 我可能没有解释我的问题。下面是只读属性的一个示例代码,我已经加入UserName属性的实体框架:

Public Property UserName As String 
    Get 
     Return _userName 
    End Get 
    Private Set(value As String) 
     userName = value 
    End Set 

Public ReadOnly Property Name As String Implements System.Security.Principal.IIdentity.Name 
    Get 
     Return UserName 
    End Get 
End Property 

我想要问的是,如果有做的任何更好的办法。

回答

1

IIdentity属性是只读的,但实现可以有setter。如果您正在使用EDMX来映射您don't have to expose these setters as public

编辑:

这是在C#中可能的,所以希望你可以用类似的方法用VB.NET(我只能读VB代码,不写):

public interface ITest { 
    string Name { get; } 
} 

public class Test : ITest { 
    public string Name { get; set; } 
} 

类提供二传手甚至界面没有定义它。

+0

使用代码首先,不是EDMX,但您的示例与我一直在做的类似(我使用Get和Private Set修改了我的问题的UserName属性,以便您可以看到我一直这样做的方式)。我只是想知道,因为我找不到任何其他方式,如果有更好的方法做或不做。 – Minnie

+0

在代码优先的情况下,它应该仍然是相同的,但是setter必须对您的上下文或配置类可见。 –

+0

你会像这样编码:public string Name {get; **内部**设置; }? – Minnie

0

EF坚持对象,而不是接口。你的对象可以拥有你想要的任何属性。您不能将接口添加到实体模型,但可以添加实现该接口的对象类型。