我需要一个linq-to-sql使用dbml,然后我按照这篇文章:http://www.west-wind.com/weblog/posts/147218.aspx
将子项设置为internal,将serialzable设置为unidirection并添加updatecheck = never
制作所有列
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DvdId",
AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true,
IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
[global::System.Runtime.Serialization.DataMemberAttribute(Order=1)]
但我还是得到了
在Assembly'System.Data.Linq中输入'System.Data.Linq.EntityRef`1 [[CategoryList,App_Code.55_rpva1,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null]]',Version = 4.0 .0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'未标记为可序列化。
在我的web.config
中,我使用二进制
<add name="Cart" type="ShoppingCart" serializeAs="Binary" allowAnonymous="true"/>
如果我不使用linq,肯定会有效
请帮忙
答案 0 :(得分:1)
可序列化,但不是通过BinaryFormatter
* - 即它不是[Serializable]
或ISerializable
。
LINQ数据上下文旨在使用DataContractSerializer
进行序列化,但是对于二进制文件,NetDataContractSerializer
或protobuf-net也可以正常工作。
如果这是 profile 序列化....我老实说不知道你是否可以编写自己的插件序列化层 - 我从来没有需要看;但在这种情况下,我会在我的配置文件中为我实际需要的对象属性编写一个简单的非LINQ对象(DTO),并从LINQ填充该对象,并序列化该
* =对于它的价值,我不认为这是件坏事; BinaryFormatter
有很多导致疼痛的方法,主动不支持它实际上是一个积极的事物,因为这种方法最终会让人们断绝。
答案 1 :(得分:0)
使用限制器属性进行序列化对我有用:
[Column]
[DataMember]
public int? MonitoredDirectorySubCategoryID { set; get; }
[NonSerialized]
[XmlIgnore]
[IgnoreDataMember]
private EntityRef<BasicReference> _MonitoredDirectorySubCategory = new EntityRef<BasicReference>();
[XmlIgnore]
[IgnoreDataMember]
[Association(Name = "FK_FilRef_BasRef_MonitoredDirectorySubCategoryID", IsForeignKey = true, Storage = "_MonitoredDirectorySubCategory", ThisKey = "MonitoredDirectorySubCategoryID")]
public BasicReference MonitoredDirectorySubCategory
{ set { _MonitoredDirectorySubCategory.Entity = value; } get { return _MonitoredDirectorySubCategory.Entity; } }